이번 문제는 덱을 활용한 문제다.
덱은 스택과 큐, 둘의 기능을 모두 활용이 가능하며, 앞과 뒤로 모두 자료를 삽입하거나 삭제하는게 가능하다.
이번 문제는 기본 덱의 기능들을 활용해 푸는 문제다. 매우 쉽게 다음과 같이 풀 수 있다.
조심해야 할 부분은, if문이다. 나는 큐에서 처음에 deque.size()>0을 넣었으나 오류가 발생했다. 안전하게 isEmpty를 이용해주도록 하겠다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Deque;
import java.util.LinkedList;
import java.util.StringTokenizer;
public class Hello_world {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
Deque<Integer> deque = new LinkedList<>();
StringBuilder sb = new StringBuilder();
int N = Integer.parseInt(br.readLine());
StringTokenizer st;
while(N-->0) {
st = new StringTokenizer(br.readLine()," ");
String str = st.nextToken();
switch(str) {
case "push_front" : deque.addFirst(Integer.parseInt(st.nextToken()));
break;
case "push_back" : deque.addLast(Integer.parseInt(st.nextToken()));
break;
case "pop_front" :
if(!deque.isEmpty()) {
sb.append(deque.poll()).append('\n');
break;
} else {
sb.append(-1).append('\n');
break;
}
case "pop_back" :
if(!deque.isEmpty()) {
sb.append(deque.pollLast()).append('\n');
break;
} else {
sb.append(-1).append('\n');
break;
}
case "size" : sb.append(deque.size()).append('\n');
break;
case "empty" :
if(!deque.isEmpty()) {
sb.append(0).append('\n');
break;
} else {
sb.append(1).append('\n');
break;
}
case "front" :
if(!deque.isEmpty()) {
sb.append(deque.peek()).append('\n');
break;
} else {
sb.append(-1).append('\n');
break;
}
case "back" :
if(!deque.isEmpty()) {
sb.append(deque.peekLast()).append('\n');
break;
} else {
sb.append(-1).append('\n');
break;
}
}
}
System.out.println(sb);
}
}