[Java] 백준(Baekjoon) 28279. 덱2

2024. 1. 30. 11:17Algorithm/자료구조

https://www.acmicpc.net/problem/28279

 

28279번: 덱 2

첫째 줄에 명령의 수 N이 주어진다. (1 ≤ N ≤ 1,000,000) 둘째 줄부터 N개 줄에 명령이 하나씩 주어진다. 출력을 요구하는 명령은 하나 이상 주어진다.

www.acmicpc.net

 

 


 

풀이

 

package dataStructure;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayDeque;
import java.util.Deque;
import java.util.StringTokenizer;

public class Ex28279 {

	public static void main(String[] args) throws NumberFormatException, IOException {
		// TODO Auto-generated method stub
		BufferedReader br= new BufferedReader(new InputStreamReader(System.in));
		
		int n= Integer.parseInt(br.readLine());
		Deque<Integer> deque= new ArrayDeque<>();
		StringBuilder sb= new StringBuilder();
		
		for(int i=0;i<n;i++) {
			String s= br.readLine();
			if(s.length()>1) {
				//명령 1 or 2
				StringTokenizer st= new StringTokenizer(s);
				int order= Integer.parseInt(st.nextToken());
				int su= Integer.parseInt(st.nextToken());
				
				if(order==1) {
					deque.offerFirst(su);
				}else if(order==2) {
					deque.offerLast(su);
				}
			}else {
				int order= Integer.parseInt(s);
				if(order==3) {
					if(deque.isEmpty()) 
						sb.append("-1\n");
					else
						sb.append(deque.pollFirst()+"\n");
				}else if(order==4) {
					if(deque.isEmpty()) 
						sb.append("-1\n");
					else
						sb.append(deque.pollLast()+"\n");
				}else if(order==5) {
					sb.append(deque.size()+"\n");
				}else if(order==6) {
					if(deque.isEmpty()) 
						sb.append("1\n");
					else 
						sb.append("0\n");
				}else if(order==7) {
					if(deque.isEmpty()) 
						sb.append("-1\n");
					else
						sb.append(deque.peekFirst()+"\n");
				}else if(order==8) {
					if(deque.isEmpty()) 
						sb.append("-1\n");
					else
						sb.append(deque.peekLast()+"\n");
				}
			}
		}
		
		System.out.println(sb.toString());
	}

}

 

- Deque 인터페이스 사용

 

 

 

참고:

https://soft.plusblog.co.kr/24

 

[Java(자바)] Deque(덱/데크) 자료구조

카프카의 소스코드를 보던 중 내부에서 Deque 클래스를 사용한 부분을 보게 되었다. Deque(덱 혹은 데크)은 Double-Ended Queue의 줄임말로 큐의 양쪽으로 엘리먼트의 삽입과 삭제를 수행할 수 있는 자료

soft.plusblog.co.kr