덱(Deque)은 어떤 쪽으로 입력하고 어떤 쪽으로 출력하냐에 따라 스택으로 사용할 수 있고 큐로 사용할 수 있다. 특히 한쪽으로만 입력 가능하도록 설정한 덱을 스크롤(Scroll)이라고 하며, 한쪽으로만 출력 가능하도록 설정한 덱을 셸프(Shelf)라고 한다.
- Deque 문제이며 자바의 Deque 라이브러리를 이용해 쉽게 풀 수 있다.
- Deque에 대한 개념은 찾아보는 것을 추천한다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayDeque;
import java.util.Deque;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer stringTokenizer = new StringTokenizer(bufferedReader.readLine());
int N = Integer.parseInt(stringTokenizer.nextToken());
Deque<Integer> deque = new ArrayDeque<>();
for (int i = 0; i < N; i++) {
stringTokenizer = new StringTokenizer(bufferedReader.readLine());
String command = stringTokenizer.nextToken();
int value = 0;
switch (command) {
case "push_front":
value = Integer.parseInt(stringTokenizer.nextToken());
deque.addFirst(value);
break;
case "push_back":
value = Integer.parseInt(stringTokenizer.nextToken());
deque.addLast(value);
break;
case "pop_front":
if (deque.isEmpty()) System.out.println(-1);
else System.out.println(deque.pollFirst());
break;
case "pop_back":
if (deque.isEmpty()) System.out.println(-1);
else System.out.println(deque.pollLast());
break;
case "size":
System.out.println(deque.size());
break;
case "empty":
if (deque.isEmpty()) System.out.println(1);
else System.out.println(0);
break;
case "front":
if (deque.isEmpty()) System.out.println(-1);
else System.out.println(deque.getFirst());
break;
case "back":
if (deque.isEmpty()) System.out.println(-1);
else System.out.println(deque.getLast());
break;
}
}
}
}