백준 10845 자바(큐)

정호윤·2023년 3월 8일

자바

목록 보기
22/46


대놓고 큐를 사용하라고 알려주는 문제이다.까다롭게 시간 제한이 달려있어서 반드시 buffer를 사용해야 한다.

입력값의 push x 저거 때문에 머리 터지는줄 알았다.이래저래 해보고 내린 결론은,push고 뭐고가 중요한게 아니고 '공백'이 들어가냐 아니냐가 핵심이었다.if else문으로 공백이 들어간 경우를 switch문 밖으로 빼내어서 따로 처리했다.switch문 자체는 어렵지 않았다.

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));
     Queue<Integer> q = new ArrayDeque<>();

     int N = Integer.parseInt(br.readLine());

     for(int i=0;i<N;i++){
        String str=br.readLine();
        String[] str2 = new String[2];
        //공백이 존재하는 경우에만 토큰을 사용한다.
        if(str.contains(" ")){
            StringTokenizer st = new StringTokenizer(str," ");
            str2[0] = st.nextToken();
            str2[1] = st.nextToken();
        }
       
		// 공백이 있는 경우를 switch문 밖으로 꺼내었다.
        if(str.contains(" ")){
                q.add(Integer.parseInt(str2[1]));
        }else{
            switch(str){
                case "pop":
                    if(q.size()==0){
                        System.out.println(-1);
                        break;
                    }
                    System.out.println(q.poll());
                    break;
                case "size":
                    System.out.println(q.size());
                    break;
                case "empty":
                    if(q.size()==0){
                        System.out.println(1);
                        break;
                    }else{
                        System.out.println(0);
                        break;
                    }
                case "front":
                    if(q.size()==0){
                        System.out.println(-1);
                        break;
                    }else{
                        System.out.println(q.peek());
                        break;
                    }
                case "back": 
                    if(q.size()==0){
                        System.out.println(-1);
                        break;
                    }
                    System.out.println(((ArrayDeque<Integer>)q).getLast());
                    break;
            }
        }
     }
    
    }

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

0개의 댓글