Baekjoon 문제 풀기 (10845번 : 큐) Java

10845번 : 큐

1. 문제읽기


큐 구현 문제

2. 제출 코드


그냥 LinkedList로 구현하면 쉽고 빠르겠지만 그래도 직접 구현하는 문제이기 때문에 배열로 구현해보았다.
물론 잘 모르겠어서 검색해서 풀었다..^^
LinkedList로 그냥 구현할 때는 메소드만 가져다가 썼는데 배열로 직접 구현해보니 이해가 더 잘되는 느낌이다.

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class BOJ10845 {
    public static void main(String[] args) throws IOException {
        BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
        int n = Integer.parseInt(bf.readLine());
        Queue queue = new Queue(n);
        StringBuilder sb = new StringBuilder();
        while(n --> 0) {
            String[] cmds = bf.readLine().split(" ");
            if(cmds.length == 2) {
                queue.push(Integer.parseInt(cmds[1]));
            }
            switch(cmds[0]) {
                case "front":
                    sb.append(queue.front()).append("\n");
                    break;
                case "back":
                    sb.append(queue.back()).append("\n");
                    break;
                case "size":
                    sb.append(queue.size()).append("\n");
                    break;
                case "pop":
                    sb.append(queue.pop()).append("\n");
                    break;
                case "empty":
                    if(queue.isEmpty()){
                        sb.append(1).append("\n");
                        break;
                    }
                    sb.append(0).append("\n");
                    break;
            }
        }
        System.out.println(sb);
    }
}

class Queue {
    private int[] queue;
    private int frontIndex = 0;
    private int backIndex = 0;

    Queue() {}

    Queue(int num) {
        queue = new int[num];
    }
    public void push(int num) {
        queue[backIndex++] = num;
    }
    public int size() {
        return backIndex - frontIndex;
    }
    public boolean isEmpty() {
        if(size()==0) {
            return true;
        } else {
            return false;
        }
    }
    public int pop() {
        if(isEmpty()) {
            return -1;
        }
        return queue[frontIndex++];
    }
    public int front() {
        if(isEmpty()) {
            return -1;
        }
        return queue[frontIndex];
    }

    public int back() {
        if(isEmpty()){
            return -1;
        }
        return queue[backIndex-1];
    }
}

3. 공부할 것


push와 pop의 로직을 잘 기억해두어야겠다.

테스트 케이스 중 back 부분이 다르게 출력되어서 확인해보니, return queue[backIndex] 로 코드를 적었다.
queue에 push될 때 backIndex가 하나 늘어나기 때문에 backIndex는 무조건 아무것도 저장되어있지 않은 인덱스를 가리키게된다. 따라서 -1을 해줘서 가장 뒤쪽에 있는 값을 출력해주어야 한다.
return queue[backIndex-1]을 해줘서 통과했다.

댓글남기기