[BOJ]백준 10845번:큐(JAVA)

ho's·2022년 4월 21일
0
post-custom-banner

문제

정수를 저장하는 큐를 구현한 다음, 입력으로 주어지는 명령을 처리하는 프로그램이다.

총 여섯 가지의 명령이 주어진다.

  • push X : 정수 X를 큐에 넣는 연산
  • pop : 큐에서 가장 앞에 있는 정수를 빼고, 그 수를 출력
  • size : 큐에 들어있는 정수의 개수를 출력
  • empty : 큐가 비어있으면 1, 아니면 0을 출력
  • front : 큐의 가장 앞에 있는 정수를 출력한다. 만약 큐에 들어있는 정수가 없는 경우 -1 출력
  • back : 큐의 가장 뒤에 있는 정수를 출력한다. 만약 큐에 들어있는 정수가 없는 경우 -1 출력

풀이

일단, 전에 Queue를 직접 만들어서 기능에 대해 알았지만 어떻게 문제를 풀어야 하는지 감이 오지 않았고, 검색을 했다..

package baekjoon.solution;

import java.util.LinkedList;
import java.util.Scanner;

public class Baekjoon_10845 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int number = scanner.nextInt();
        LinkedList<Integer> queue = new LinkedList<>();
        for(int i = 0; i <number; i++) {
            String command = scanner.next();
            switch(command) {
                case "push":
                    int x = scanner.nextInt();
                    queue.add(x);
                    break;
                case "pop":
                    if (queue.isEmpty())
                        System.out.println(-1);
                    else
                        System.out.println(queue.removeFirst());
                    break;
                case "empty":
                    if (queue.isEmpty())
                        System.out.println(1);
                    else
                        System.out.println(0);
                    break;
                case "front":
                    if (queue.isEmpty())
                        System.out.println(-1);
                    else
                        System.out.println(queue.getFirst());
                    break;
                case "back":
                    if (queue.isEmpty())
                        System.out.println(-1);
                    else
                        System.out.println(queue.getLast());
                    break;
                case "size":
                    System.out.println(queue.size());
                    break;
            }
        }
    }
}

하지만 위와 같이 시간 초과가 뜬다!
if else문을 사용해도 시간초과가 뜬다.
시간 초과를 해결하기 위해서는 StringBuffer를 이용해야 한다.

소스코드


import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;
import java.util.StringTokenizer;

public class Baekjoon_10845 {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int N = Integer.parseInt(br.readLine());
        StringTokenizer st;
        StringBuilder sb = new StringBuilder();
        Queue<Integer> queue = new LinkedList<Integer>();
        int back = -1;

        for(int i=0;i<N;i++) {
            st = new StringTokenizer(br.readLine());
            String type = st.nextToken();
            switch (type) {
                case "push":
                    back = Integer.parseInt(st.nextToken());
                    queue.add(back);
                    break;
                case "pop":
                    if (queue.isEmpty()) {
                        sb.append("-1").append("\n");
                        break;
                    }
                    sb.append(queue.poll()).append("\n");
                    break;

                case "size":
                    sb.append(queue.size()).append("\n");
                    break;
                case "empty":
                    sb.append(queue.isEmpty() ? 1 : 0).append("\n");
                    break;

                case "front":
                    sb.append(queue.isEmpty() ? -1 : queue.peek()).append("\n");
                    break;
                case "back":
                    sb.append(queue.isEmpty() ? -1 : back).append("\n");
                    break;
            }
        }
            System.out.println(sb);
    }
}

해결 되었다!

profile
그래야만 한다
post-custom-banner

0개의 댓글