[JAVA/10845번] 큐(Queue)

고지훈·2021년 9월 7일
1

Algorithm

목록 보기
18/68
post-thumbnail

문제


입력 및 출력


풀이

import java.io.*;

class Main {
    public static void main(String args[]) {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int N = br.readLine();
        int[] queue = new int[N];
        int front = 0, index = -1;

        for (int i = 0; i < N; i++) {
            String[] input = br.readLine().split(" ");

            switch (input[0]) {
                case "push":
                    queue[i] = input[1];
                    index++;
                    break;
                case "pop":
                    if (index == -1) {
                        System.out.println(index);
                        break;
                    }
                    System.out.println(queue[front]);
                    index--;
                    break;
                case "size":
                    System.out.println(index);
                    break;
                case "empty":
                    if (index == -1) {
                        System.out.println(1);
                    } else {
                        System.out.println(0);
                    }
                    break;
                case "front":
                    if (index == -1) {
                        System.out.println(-1);
                        break;
                    }
                    System.out.println(queue[front]);
                    break;
                case "back":
                    if (index == -1) {
                        System.out.println(-1);
                        break;
                    }
                    System.out.println(queue[index]);
                    break;
            }
        }
    }
}

결과 및 해결방법

[결과]

[정리]

해결방법

  • 이전에 해결하였던 스택 구현 문제를 기반으로 큐를 구현하였다.

  • 큐는 선입선출의 방식으로 이루어진 자료구조이고, 이러한 특성 때문에 가장 먼저 입력된 데이터가 가장 먼저 나가는 특징을 갖고 있다. 따라서 큐를 구현할 때 가장 중요하게 생각한 부분이 frontback 부분이다.

    가장 먼저 PUSH 연산을 수행할 때, back을 증가하고 배열에 입력받은 숫자를 저장하였다. POP 연산을 수행할 때, frontback보다 큰 경우는 큐가 비어있는 상태이므로 -1을 출력하고 선입선출의 특성에 따라 가장 먼저 들어온 데이터를 출력하고 front를 1증가 시켰다.

    다른 부분은 모두 비슷한 로직으로 구성되지만, SIZE의 경우 back에서 1을 더한 값에 front를 뺀 값을 출력하였다. 이유는 back은 큐에 가장 마지막에 들어온 데이터이지만 인덱스의 값이기 때문에 1을 더하였고, front는 POP 연산을 수행할 때마다 증가하므로 (back + 1) - front를 적용하였다.

profile
"계획에 따르기보다 변화에 대응하기를"

0개의 댓글