import java.util.*;
import java.io.*;
public class Main {
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int n = Integer.parseInt(br.readLine());
String[] command = new String[n];
int[] s = new int[n];
for(int i=0;i<n;i++) {
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
String comm = st.nextToken();
if(comm.equals("push")) {
command[i] = comm;
s[i] = Integer.parseInt(st.nextToken());
} else {
command[i] = comm;
}
}
for(int r : solution(n, command, s)) {
bw.write(r+"\n");
}
bw.flush();
bw.close();
br.close();
}
public static ArrayList<Integer> solution(int n, String[] command, int[] s) {
Deque<Integer> queue = new ArrayDeque<>();
ArrayList<Integer> answer = new ArrayList<>();
for(int i=0;i<n;i++) {
if(command[i].equals("push")) {
queue.offer(s[i]);
} else if(command[i].equals("pop")) {
if(queue.isEmpty()) {
answer.add(-1);
} else {
answer.add(queue.poll());
}
} else if(command[i].equals("size")) {
answer.add(queue.size());
} else if(command[i].equals("empty")) {
if(queue.isEmpty()) {
answer.add(1);
} else {
answer.add(0);
}
} else if(command[i].equals("front")) {
if(queue.isEmpty()) {
answer.add(-1);
} else {
answer.add(queue.peek());
}
} else if(command[i].equals("back")) {
if(queue.isEmpty()) {
answer.add(-1);
} else {
answer.add(queue.peekLast());
}
}
}
return answer;
}
}
- Queue 대신 Deque를 적극 활용하자
- Deque는 offerLast(), peekLast()와 같이 앞 뒤 모두 사용 가능