https://www.acmicpc.net/problem/18258
문제
> 정수를 저장하는 큐를 구현한 다음, 입력으로 주어지는 명령을 처리하는 프로그램을 작성하시오.
> 명령은 총 여섯 가지이다.
push X: 정수 X를 큐에 넣는 연산이다.
pop: 큐에서 가장 앞에 있는 정수를 빼고, 그 수를 출력한다. 만약 큐에 들어있는 정수가 없는 경우에는 -1을 출력한다.
size: 큐에 들어있는 정수의 개수를 출력한다.
empty: 큐가 비어있으면 1, 아니면 0을 출력한다.
front: 큐의 가장 앞에 있는 정수를 출력한다. 만약 큐에 들어있는 정수가 없는 경우에는 -1을 출력한다.
back: 큐의 가장 뒤에 있는 정수를 출력한다. 만약 큐에 들어있는 정수가 없는 경우에는 -1을 출력한다.
접근
큐를 이용해 문제에 주어진 기능을 큐의 기능을 사용하여 구현한다. back의 기능의 구현을 위해 queue가 아닌 Deque를 사용하여 접근한다.
문제해결
> 명령어의 개수 N을 입력받고 while문으로 명령어를 받는다.
> cmd로 명령어를 받고 명령어에 따라 값이 필요하면 x에 받아준다.
> switch문으로 명령어에 따라 기능을 나눠준다.
> push는 큐의 삽입기능을 사용해 x를 넣어준다.
> pop은 isEmpty로 큐를 확인하고 원소가 있으면 poll로 제거, 없으면 -1을 출력한다.
> size는 q.size()로 출력, empty도 isEmpty()로 있으면 1 없으면 0을 출력한다.
> front와 back도 isEmpty로 원소가 있는지 확인하고 각각 peek와 getLast로 앞 뒤에 접근해 출력한다.
코드
import java.io.*;
import java.util.*;
import java.lang.*;
public class Main {
//18258번 큐2
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
int N = Integer.parseInt(br.readLine());
Deque<Integer> q = new LinkedList<>();
while(N--> 0) {
StringTokenizer st = new StringTokenizer(br.readLine());
String cmd = st.nextToken();
int x = 0;
if(st.hasMoreTokens()) x = Integer.parseInt(st.nextToken());
switch(cmd) {
case "push" :
q.offer(x);
break;
case "pop" :
if(q.isEmpty()) sb.append(-1).append('\n');
else sb.append(q.poll()).append('\n');
break;
case "size" :
sb.append(q.size()).append('\n');
break;
case "empty" :
if(q.isEmpty()) sb.append(1).append('\n');
else sb.append(0).append('\n');
break;
case "front" :
if(q.isEmpty()) sb.append(-1).append('\n');
else sb.append(q.getFirst()).append('\n');
break;
case "back" :
if(q.isEmpty()) sb.append(-1).append('\n');
else sb.append(q.getLast()).append('\n');
}
}
System.out.print(sb);
}
}

후기
그냥 queue로 하려고 헀는데 back때문에 deque를 사용했다