/ BOJ

BOJ_18258_큐2_JAVA

문제 : 큐2

링크 : BOJ_10828_큐2

접근 방식

시간복잡도를 O(1)로 해야되기 때문에 조금 까다롭다. 자바의 Queue클래스는 LinkedList와 같이 사용해야한다.

또 다른 문제는, 자바의 Queue 클래스에서는 첫 번째 수를 구하는 peek메서드는 있어도, 마지막 수를 구하는 메서드가 존재하지 않기 때문에, 큐 문제이지만 그냥 덱을 사용했다.

풀이 방법

  1. push : 생성한 queue에 offer 메서드를 통해 값을 집어넣는다.

  2. pop : Integer 변수 k에 queue에서 poll 메서드로 값을 꺼내서 저장한다. Deque 클래스의 poll() 메서드는 queue가 비어있으면 null을 반환하므로, 조건문을 넣어 k가 null일 경우 -1을, null이 아닐경우 k를 출력하게 한다.

  3. size : 현재 queue의 사이즈를 출력한다.

  4. empty : isEmpty 메서드를 통해 queue가 비어있는 지 확인한다. 비어있다면 1을, 비어있지 않다면 0을 출력한다.

  5. front : Integer 변수 k1에 peek 메서드를 통해 가장 첫번쨰 값을 읽어와 저장한다. peek 메서드는 queue가 비어있으면 null을 반환하므로, 조건문을 통해 2번 처럼 구분해준다.

  6. back : Integer 변수 k11에 peekLast 메서드를 통해 queue의 마지막 값을 읽어와 저장한다. peekLast 메서드는 queue가 비어있으면 null을 반환하므로, 조건문을 통해 2번 처럼 구분해준다.

소스 코드


import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

import java.util.Deque;
import java.util.LinkedList;


public class BOJ_18258_큐2 {

	public static void main(String[] args) throws NumberFormatException, IOException {

		BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
		Deque<Integer> queue = new LinkedList<Integer>();
		int N = Integer.parseInt(in.readLine());
		StringBuilder sb = new StringBuilder();
		for (int i = 0; i < N; i++) {
			String[] str = in.readLine().split(" ");
			switch(str[0]) {
			case "push":
				queue.offer(Integer.parseInt(str[1]));
				break;
			case "pop":
				Integer k = queue.poll();
				if(k == null) {
					sb.append(-1).append('\n');
				}else {
					sb.append(k).append('\n');
				}
				break;
			case "size":
				// 큐의 사이즈 출력
				sb.append(queue.size()).append('\n');
				break;
			case "empty":
				if(queue.isEmpty()) {
					sb.append(1).append('\n');
				}else{
					sb.append(0).append('\n');
				}
				break;
			case "front":
				Integer k1 = queue.peek();
				if(k1 == null) {
					sb.append(-1).append('\n');
				}else{
					sb.append(k1).append('\n');
				}
				break;
			case "back":
				Integer k11 = queue.peekLast();
				if(k11 == null) {
					sb.append(-1).append('\n');
				}else{
					sb.append(k11).append('\n');
				}
				break;
			}
		}
		System.out.print(sb);
	}
}