
큐 문제와 거의 동일한 문제이다.
import java.util.Arrays;
import java.util.Comparator;
import java.util.Scanner;
import java.util.StringTokenizer;
import java.util.LinkedList;
import java.util.Queue;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.ArrayDeque;
class Main{
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
ArrayDeque<Integer> deque = new ArrayDeque<>();
int N = Integer.parseInt(br.readLine());
for(int i=0;i<N;i++){
String str = br.readLine();
if(str.contains(" ")){
StringTokenizer st = new StringTokenizer(str," ");
String[] arr = new String[2];
arr[0] = st.nextToken();
arr[1] = st.nextToken();
switch(arr[0]){
case "push_front" :
deque.addFirst(Integer.parseInt(arr[1]));
break;
case "push_back" :
deque.addLast(Integer.parseInt(arr[1]));
break;
}
}else{
switch(str){
case "pop_front":
if(deque.size()==0) System.out.println(-1);
else System.out.println(deque.poll());
break;
case "pop_back":
if(deque.size()==0) System.out.println(-1);
else System.out.println(deque.pollLast());
break;
case "size":
System.out.println(deque.size());
break;
case "empty":
if(deque.size()==0) System.out.println(1);
else System.out.println(0);
break;
case "front":
if(deque.size()==0) System.out.println(-1);
else System.out.println(deque.peek());
break;
case "back":
if(deque.size()==0) System.out.println(-1);
else System.out.println(deque.peekLast());
break;
}
}
}
}
}
입력은 buffer로 출력은 println으로 처리했다.속도를 높이려고 출력도 buffer를 사용해봤다.
import java.util.Arrays;
import java.util.Comparator;
import java.util.Scanner;
import java.util.StringTokenizer;
import java.util.LinkedList;
import java.util.Queue;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.ArrayDeque;
class Main{
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
ArrayDeque<Integer> deque = new ArrayDeque<>();
int N = Integer.parseInt(br.readLine());
for(int i=0;i<N;i++){
String str = br.readLine();
if(str.contains(" ")){
StringTokenizer st = new StringTokenizer(str," ");
String[] arr = new String[2];
arr[0] = st.nextToken();
arr[1] = st.nextToken();
switch(arr[0]){
case "push_front" :
deque.addFirst(Integer.parseInt(arr[1]));
break;
case "push_back" :
deque.addLast(Integer.parseInt(arr[1]));
break;
}
}else{
switch(str){
case "pop_front":
if(deque.size()==0){
bw.write(String.valueOf(-1)+"\n");
bw.flush();
}
else{
bw.write(String.valueOf(deque.poll())+"\n");
bw.flush();
}
break;
case "pop_back":
if(deque.size()==0) {
bw.write(String.valueOf(-1)+"\n");
bw.flush();
}
else {
bw.write(String.valueOf(deque.pollLast())+"\n");
bw.flush();
}
break;
case "size":
bw.write(String.valueOf(deque.size())+"\n");
bw.flush();
break;
case "empty":
if(deque.size()==0){
bw.write(String.valueOf(1)+"\n");
bw.flush();
}
else {
bw.write(String.valueOf(0)+"\n");
bw.flush();
};
break;
case "front":
if(deque.size()==0){
bw.write(String.valueOf(-1)+"\n");
bw.flush();
}
else {
bw.write(String.valueOf(deque.peek())+"\n");
bw.flush();
}
break;
case "back":
if(deque.size()==0){
bw.write(String.valueOf(-1)+"\n");
bw.flush();
}
else {
bw.write(String.valueOf(deque.peekLast())+"\n");
bw.flush();
}
break;
}
}
}
bw.close();
br.close();
}
}
근데 이랬더니 시간초과가 뜬다.당황스럽다.아니 근데 또 한번 더 돌리니까 시간초과 안 뜨네

당황스럽다...시간은 출력도 buffer 쓴게 더 걸렸다.모르겠다