자바 10866 자바(덱)

정호윤·2023년 3월 8일

자바

목록 보기
23/46


큐 문제와 거의 동일한 문제이다.

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 쓴게 더 걸렸다.모르겠다

profile
개발자로 취직을 희망합니다.

0개의 댓글