Programing/BaekJoon

[JAVA] 백준 10845 : 큐

블스뜸 2025. 3. 30. 22:38
import java.io.*;
import java.util.StringTokenizer;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        StringTokenizer st;
        NodeManager nodeManager = new NodeManager();

        int count = Integer.parseInt(br.readLine());

        for (int i = 0; i < count; i++) {
            st = new StringTokenizer(br.readLine());
            String command = st.nextToken();
            switch (command) {
                case "push": {
                    int order = Integer.parseInt(st.nextToken());
                    nodeManager.push(new QueueNode(order));
                    break;
                }
                case "pop": {
                    QueueNode popped = nodeManager.pop();
                    bw.write((popped == null ? -1 : popped.getValue()) + "\n");
                    break;
                }
                case "size": {
                    bw.write(nodeManager.getSize() + "\n");
                    break;
                }
                case "empty": {
                    bw.write((nodeManager.isEmpty() ? 1 : 0) + "\n");
                    break;
                }
                case "front": {
                    QueueNode front = nodeManager.peek();
                    bw.write((front == null ? -1 : front.getValue()) + "\n");
                    break;
                }
                case "back": {
                    if (nodeManager.isEmpty()) {
                        bw.write("-1\n");
                    } else {
                        bw.write(nodeManager.tail.getValue() + "\n");
                    }
                    break;
                }
                default:
                    break;
            }
        }

        bw.flush();
        bw.close();
        br.close();
    }
}

class QueueNode {
    private int value;
    QueueNode nextNode;

    public QueueNode(int value) {
        this.value = value;
        nextNode = null;
    }

    public int getValue() {
        return value;
    }

    public void setNextNode(QueueNode node) {
        this.nextNode = node;
    }

    public QueueNode getNextNode() {
        return nextNode;
    }
}

class NodeManager {
    QueueNode head, tail;
    private int size;

    public NodeManager() {
        size = 0;
        head = tail = null;
    }

    public int getSize() {
        return size;
    }

    public boolean isEmpty() {
        return head == null;
    }

    public QueueNode pop() {
        if (isEmpty()) return null;
        QueueNode node = head;
        if (head.getNextNode() == null) {
            head = tail = null;
        } else {
            head = head.getNextNode();
        }
        size--;
        return node;
    }

    public void push(QueueNode node) {
        if (isEmpty()) {
            head = tail = node;
        } else {
            tail.setNextNode(node);
            tail = node;
        }
        size++;
    }

    public QueueNode peek() {
        if (isEmpty()) return null;
        return head;
    }
}