개발자 미니민의 개발스터디

[백준 JAVA] 18258번 풀이 - 큐2 (큐는 선입선출)

by mini_min

무수히 많은 시간초과...후...

package quiz;

import java.io.*;
import java.util.Deque;
import java.util.LinkedList;
import java.util.StringTokenizer;

/**
 * 정수를 저장하는 큐를 구현한 다음, 입력으로 주어지는 명령을 처리하는 프로그램을 작성하시오.
 *
 * 명령은 총 여섯 가지이다.
 *
 * push X: 정수 X를 큐에 넣는 연산이다.
 * pop: 큐에서 가장 앞에 있는 정수를 빼고, 그 수를 출력한다. 만약 큐에 들어있는 정수가 없는 경우에는 -1을 출력한다.
 * size: 큐에 들어있는 정수의 개수를 출력한다.
 * empty: 큐가 비어있으면 1, 아니면 0을 출력한다.
 * front: 큐의 가장 앞에 있는 정수를 출력한다. 만약 큐에 들어있는 정수가 없는 경우에는 -1을 출력한다.
 * back: 큐의 가장 뒤에 있는 정수를 출력한다. 만약 큐에 들어있는 정수가 없는 경우에는 -1을 출력한다.
 */
public class _18258 {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        StringBuilder sb = new StringBuilder();

        int n = Integer.parseInt(br.readLine());
        int back = 0;
        Deque<Integer> q = new LinkedList<>();

        for(int i=0; i<n; i++){
            StringTokenizer st = new StringTokenizer(br.readLine());
            String order = st.nextToken();

            if(order.equals("push")){
                int x = Integer.parseInt(st.nextToken());
                q.add(x);
                back = x;
            } else if (order.equals("pop")){
                if(!q.isEmpty()){
                    sb.append(q.poll()+"\n");
                } else {
                    sb.append(-1+"\n");
                }
            } else if (order.equals("size")) {
                sb.append(q.size()+"\n");
            } else if (order.equals("empty")) {
                if(!q.isEmpty()){
                    sb.append(0+"\n");
                } else {
                    sb.append(1+"\n");
                }
            } else if (order.equals("front")) {
                if(!q.isEmpty()){
                    sb.append(q.peek()+"\n");
                } else {
                    sb.append(-1+"\n");
                }
            } else if (order.equals("back")) {
                if(!q.isEmpty()){
                    sb.append(back+"\n");
                } else {
                    sb.append(-1+"\n");
                }
            }
        }

        bw.write(sb.toString());
        bw.close();

    }
}

 

풀이

시간초과 ! 🔥🔥🔥

때문에 너무 힘들었다.

내가 기존에 짠 코드의 시간초과의 원인은 큐의 마지막 정수 값을 출력할 때, toArray() 를 사용했기 때문이었다.

큐 -> 배열 생성 -> 배열의 마지막 index 값 출력 

=> 이 과정에서 시간 초과가 나버림... 

 

"큐" 자료구조는 선입선출이 원칙이기 때문에 가장 최근에 push 되는 값이 곧 마지막 정수값이다.

int back =0; 변수 만들어서 출력하고 배열은 삭제했더니 그제서야 성공! 

 

 

 

블로그의 정보

개발자 미니민의 개발로그

mini_min

활동하기