import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
Queue<Integer> queue = new LinkedList<>();
int cnt = Integer.parseInt(br.readLine());
int last = 0;
StringBuilder sb = new StringBuilder();
while(cnt-- > 0) {
StringTokenizer st = new StringTokenizer(br.readLine());
String order = st.nextToken();
boolean isEmpty = queue.isEmpty();
switch (order) {
case "push":
last = Integer.parseInt(st.nextToken());
queue.offer(last);
break;
case "pop":
if(isEmpty) {
sb.append("-1\n");
} else {
sb.append(queue.poll() + "\n");
}
break;
case "size":
sb.append(queue.size() + "\n");
break;
case "empty":
if(isEmpty) {
sb.append("1\n");
} else {
sb.append("0\n");
}
break;
case "front":
if(isEmpty) {
sb.append("-1\n");
} else {
sb.append(queue.peek() + "\n");
}
break;
case "back":
if(isEmpty) {
sb.append("-1\n");
} else {
sb.append(last + "\n");
}
break;
}
}
bw.write(sb.toString());
bw.flush();
bw.close();
br.close();
}
}
함수로 빼서 배열에 구현하는 사람도 있는데 나는 있는 클래스를 활용했다.
코드는 stack 구현 내용과 거의 동일하다.
인터페이스이기 때문에 LinkedList로 구현해야한다
같은 동작을 하는데 return값으로 exception을 던지거나 null을 던지는 메소드로 나뉘어있다.