문제 해석
- 첫번째 줄에 명령어의 수 N을 입력받고, 해당 명령어의 수만큼 한줄씩 명령어를 입력받는다.
- 입력받은 명령어의 결과 값을 차례대로 출력하면 된다.
- 명령어의 종류는 아래와 같다.
1 X: 정수 X를 덱의 앞에 넣는다. (1 ≤ X ≤ 100,000)
2 X: 정수 X를 덱의 뒤에 넣는다. (1 ≤ X ≤ 100,000)
3: 덱에 정수가 있다면 맨 앞의 정수를 빼고 출력한다. 없다면 -1을 대신 출력한다.
4: 덱에 정수가 있다면 맨 뒤의 정수를 빼고 출력한다. 없다면 -1을 대신 출력한다.
5: 덱에 들어있는 정수의 개수를 출력한다.
6: 덱이 비어있으면 1, 아니면 0을 출력한다.
7: 덱에 정수가 있다면 맨 앞의 정수를 출력한다. 없다면 -1을 대신 출력한다.
8: 덱에 정수가 있다면 맨 뒤의 정수를 출력한다. 없다면 -1을 대신 출력한다.
코드
1
import java.io.*;
import java.util.ArrayDeque;
import java.util.Deque;
import java.util.StringTokenizer;
public class Main {
static StringBuilder sb = new StringBuilder();
static Deque<Integer> deque = new ArrayDeque<>();
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
int N = Integer.parseInt(br.readLine());
while(N --> 0) {
st = new StringTokenizer(br.readLine());
int order = Integer.parseInt(st.nextToken());
switch (order){
case 1 :
frontPush(Integer.parseInt(st.nextToken()));
break;
case 2 :
backPush(Integer.parseInt(st.nextToken()));
break;
case 3 :
frontPop();
break;
case 4 :
backPop();
break;
case 5 :
dequeSize();
break;
case 6 :
dequeEmpty();
break;
case 7 :
getFront();
break;
case 8 :
getBack();
break;
}
}
br.close();
System.out.println(sb);
}
static void frontPush(int element){
deque.addFirst(element);
}
static void backPush(int element){
deque.addLast(element);
}
static void frontPop(){
if(deque.isEmpty()){
sb.append("-1").append("\n");
return;
}
sb.append(deque.pollFirst()).append("\n");
}
static void backPop(){
if(deque.isEmpty()){
sb.append("-1").append("\n");
return;
}
sb.append(deque.pollLast()).append("\n");
}
static void dequeSize(){
sb.append(deque.size()).append("\n");
}
static void dequeEmpty(){
sb.append(deque.isEmpty()? 1 : 0).append("\n");
}
static void getFront(){
if(deque.isEmpty()){
sb.append("-1").append("\n");
return;
}
sb.append(deque.peekFirst()).append("\n");
}
static void getBack(){
if(deque.isEmpty()){
sb.append("-1").append("\n");
return;
}
sb.append(deque.peekLast()).append("\n");
}
}
2
import java.io.*;
import java.util.ArrayDeque;
import java.util.Deque;
import java.util.StringTokenizer;
public class Main {
static StringBuilder sb = new StringBuilder();
static Deque<Integer> deque = new ArrayDeque<>();
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
int N = Integer.parseInt(br.readLine());
while(N --> 0) {
st = new StringTokenizer(br.readLine());
int order = Integer.parseInt(st.nextToken());
switch (order){
case 1 :
deque.addFirst(Integer.parseInt(st.nextToken()));
break;
case 2 :
deque.addLast(Integer.parseInt(st.nextToken()));
break;
case 3 :
sb.append(deque.isEmpty()? -1 : deque.pollFirst()).append("\n");
break;
case 4 :
sb.append(deque.isEmpty()? -1 : deque.pollLast()).append("\n");
break;
case 5 :
sb.append(deque.size()).append("\n");
break;
case 6 :
sb.append(deque.isEmpty()? 1 : 0).append("\n");
break;
case 7 :
sb.append(deque.isEmpty()? -1 :deque.peekFirst()).append("\n");
break;
case 8 :
sb.append(deque.isEmpty()? -1 : deque.peekLast()).append("\n");
break;
}
}
br.close();
System.out.println(sb);
}
}
결과
1
2
느낀 점
- 스택, 큐 문제에서 이러한 명령어 수행 문제는 꽤 많이 했던 것 같은 느낌이여서 큰 어려움없이 풀 수 있었다.