백준

백준 18258: 큐 2(java)

unhyepnhj 2024. 7. 15. 21:20

문제


풀이

이전에 풀었던 스택 기본 문제들과 동일한 유형이므로, 똑같이 입력을 받고 switch문으로 케이스를 나누어 풀이하면 된다. 

큐를 별도로 구현하지 않고 JDK에서 제공하는 기본 라이브러리를 사용했다. (큐 직접 구현은 이곳을 참고)

 

이전 큐 문제에서는 back을 구현할 때 num을 출력하는 것으로 해결했는데, 이번에는 덱을 사용해 peekLast() 메소드로 풀이했다. 

StringBuilder를 사용하지 않으면 시간 초과 에러가 떠서 사용해 주었다.

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

public class Main {
	public static void main(String[] args) throws IOException{
		BufferedReader in=new BufferedReader(new InputStreamReader(System.in));
		Deque<Integer> deque=new LinkedList<>();
		StringBuilder sb=new StringBuilder();
		StringTokenizer st;
		
		int N=Integer.parseInt(in.readLine());
		for(int i=0; i<N; i++) {
			st=new StringTokenizer(in.readLine());
			String cmd=st.nextToken();
			
			switch(cmd) {
			case "push":
				int num=Integer.parseInt(st.nextToken());
				deque.addLast(num);
				break;
			case "pop":
				if(deque.isEmpty())
					sb.append(-1).append("\n");
				else 
					sb.append(deque.pollFirst()).append("\n");
				break;
			case "size":
				sb.append(deque.size()).append("\n");
				break;
			case "empty":
				if(deque.isEmpty())
					sb.append(1).append("\n");
				else
					sb.append(0).append("\n");
				break;
			case "front":
				if(deque.isEmpty())
					sb.append(-1).append("\n");
				else
					sb.append(deque.peekFirst()).append("\n");
				break;
			case "back":
				if(deque.isEmpty())
					sb.append(-1).append("\n");
				else
					sb.append(deque.peekLast()).append("\n");
				break;
			default:
				break;
			}
		}
		System.out.print(sb);
	}
}