큐에서 중요한 거 역시 push와 pop 스택과 다른건 선입선출이란 점 뿐
중요 매서드는 다음과 같이 구현 할 수 있다.
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
import java.util.ArrayDeque;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
int N = Integer.parseInt(br.readLine());
ArrayDeque<Integer> queue = new ArrayDeque<>();
for (int i = 0; i < N; i++) {
StringTokenizer st = new StringTokenizer(br.readLine());
String command = st.nextToken();
switch (command) {
case "push":
int num = Integer.parseInt(st.nextToken());
queue.offer(num);
break;
case "pop":
sb.append(queue.isEmpty() ? "-1\n" : String.valueOf(queue.poll()) + "\n");
break;
case "size":
sb.append(String.valueOf(queue.size()) + "\n");
break;
case "empty":
sb.append(queue.isEmpty() ? "1\n" : "0\n");
break;
case "front":
sb.append(queue.isEmpty() ? "-1\n" : String.valueOf(queue.peek()) + "\n");
break;
case "back":
sb.append(queue.isEmpty() ? "-1\n" : String.valueOf(queue.peekLast()) + "\n");
break;
default:
break;
}
}
System.out.println(sb);
}
}
스택과 마찬가지로 이미 구현되어 있는 ArrayDeque를 이용했다.
문제에서 효율을 위해서 StringBuilder 등으로 입력과 출력을 처리하였다.
큐를 이해하는 가장 좋은 방법은 맛집 줄서기라고 생각한다.
요즘에 파이브가이즈 같은거 강남에 오픈하면 수 많은 사람이 오픈런을 한다. 제일 먼저 온 사람이 제일 주문도 빨리 할 수 있다. 현실과 다르게 프로그래밍에선 새치기 따위가 없으니 무조건 줄 서야한다. 그래서 큐는 마지막에 넣은 원소를 마지막에서 얻을 수 있다. 리스트로 치면 [5, 3, 1]에 7을 큐 구조로 집어 넣으면 [7, 5, 3, 1]로 전체적으로 한 칸씩 밀어버리고 큐 구조로 값을 얻고 싶으면 제일 오른쪽 1, 즉 가장 첫 번째로 넣은 원소부터 접근 할 수 있다.