알고리즘/백준 알고리즘(JAVA)

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

starmk95 2020. 7. 14. 18:22

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() 메소드는 큐의 머리(가장 앞)의 원소를 반환하고 큐에서 해당 원소를 삭제한다.