학습용 공간

알고리즘/백준 알고리즘(JAVA) 2020.07.14 댓글 개 starmk95

JAVA)10845번 Queue(큐) 구현하기

Queue(큐)는 선입선출 방식으로 구성되는 자료구조이다. (First In First Out, FIFO)

원소의 삽입(push)은 무조건 큐의 뒷(꼬리)로만 이루어지고 

원소의 삭제(pop)는 무조건 큐의 앞(머리)에서만 이루어진다.

ArrayList를 사용하여 구현했다.

 

import java.io.*;
import java.util.ArrayList;
import java.util.Stack;

public class Main {
    public static void main(String [] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        MyQueue queue = new MyQueue();
        int cnt = Integer.parseInt(br.readLine());
        for (int i=0;i<cnt;i++) {
            String command = br.readLine();
            switch (command) {
                case "pop" :
                    System.out.println(queue.pop());
                    break;
                case "size" :
                    System.out.println(queue.getSize());
                    break;
                case "empty" :
                    System.out.println(queue.isEmpty());
                    break;
                case "front" :
                    System.out.println(queue.getFront());
                    break;
                case "back" :
                    System.out.println(queue.getBack());
                    break;
                default :
                    int num = Integer.parseInt(command.substring(5));
                    queue.push(num);
                    break;
            }
        }
        br.close();
    }
}

class MyQueue {
    ArrayList<Integer> queue = new ArrayList<>();
    int size = 0;
    int front = -1;
    int back = -1;

    public void push(int item) {
        if (queue.isEmpty()) {
            front = item;
        }
        queue.add(item);
        size++;
        back = item;
    }

    public int pop() {
        if (queue.isEmpty()) {
            return -1;
        }
        int temp = queue.remove(0);
        if (queue.isEmpty()) {
            front = -1;
            back = -1;
        } else {
            front = queue.get(0);
        }
        size--;
        return temp;
    }

    public int isEmpty() {
        if (queue.isEmpty()) {
            return 1;
        }
        return 0;
    }

    public int getSize() {
        return size;
    }

    public int getFront() {
        return front;
    }

    public int getBack() {
        return back;
    }
}

MyQueue는 front, back, size 변수를 가지며, 각 변수는 차례로 큐의 첫 원소(머리), 큐의 마지막 원소(꼬리), 그리고 큐에 들어있는 원소들의 개수를 나타낸다.

push(int item) 메소드는 큐의 꼬리(마지막 원소의 뒤)에 item을 삽입하고

pop() 메소드는 큐의 머리(가장 앞)의 원소를 반환하고 큐에서 해당 원소를 삭제한다.