import java.io.*;
class Main {
public static void main(String args[]) {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = br.readLine();
int[] queue = new int[N];
int front = 0, index = -1;
for (int i = 0; i < N; i++) {
String[] input = br.readLine().split(" ");
switch (input[0]) {
case "push":
queue[i] = input[1];
index++;
break;
case "pop":
if (index == -1) {
System.out.println(index);
break;
}
System.out.println(queue[front]);
index--;
break;
case "size":
System.out.println(index);
break;
case "empty":
if (index == -1) {
System.out.println(1);
} else {
System.out.println(0);
}
break;
case "front":
if (index == -1) {
System.out.println(-1);
break;
}
System.out.println(queue[front]);
break;
case "back":
if (index == -1) {
System.out.println(-1);
break;
}
System.out.println(queue[index]);
break;
}
}
}
}
해결방법
이전에 해결하였던 스택 구현 문제를 기반으로 큐를 구현하였다.
큐는 선입선출의 방식으로 이루어진 자료구조이고, 이러한 특성 때문에 가장 먼저 입력된 데이터가 가장 먼저 나가는 특징을 갖고 있다. 따라서 큐를 구현할 때 가장 중요하게 생각한 부분이 front
와 back
부분이다.
가장 먼저 PUSH 연산을 수행할 때, back
을 증가하고 배열에 입력받은 숫자를 저장하였다. POP 연산을 수행할 때, front
가 back
보다 큰 경우는 큐가 비어있는 상태이므로 -1을 출력하고 선입선출의 특성에 따라 가장 먼저 들어온 데이터를 출력하고 front
를 1증가 시켰다.
다른 부분은 모두 비슷한 로직으로 구성되지만, SIZE의 경우 back
에서 1을 더한 값에 front
를 뺀 값을 출력하였다. 이유는 back
은 큐에 가장 마지막에 들어온 데이터이지만 인덱스의 값이기 때문에 1을 더하였고, front
는 POP 연산을 수행할 때마다 증가하므로 (back + 1) - front
를 적용하였다.