Programing/BaekJoon

[JAVA] 백준 10828 : 스택

블스뜸 2025. 3. 31. 16:41

큐를 학습하고 나서 한거라 그런지 스택은 손쉽게 구현했다

import java.io.*;
import java.util.NoSuchElementException;
import java.util.StringTokenizer;

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

        for (int i = 0; i < count; i++) {
            st = new StringTokenizer(br.readLine());
            Object result;

            switch (st.nextToken()) {
                case "push":
                    nodeManager.push(new StackNode(Integer.parseInt(st.nextToken())));
                    break;
                case "pop":
                    result = nodeManager.pop();
                    bw.write(String.valueOf(result));
                    bw.newLine();
                    break;
                case "size":
                    result = nodeManager.getSize();
                    bw.write(String.valueOf(result));
                    bw.newLine();
                    break;
                case "empty":
                    result = nodeManager.isEmpty() ? 1 : 0;
                    bw.write(String.valueOf(result));
                    bw.newLine();
                    break;
                case "top":
                    result = nodeManager.getTop() == null ? -1 : nodeManager.getTop().getValue();
                    bw.write(String.valueOf(result));
                    bw.newLine();
                    break;
                default:
                    result = null;
                    break;
            }


        }


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

class StackNode {
    private final int value;
    private StackNode prevNode;

    public StackNode(int value) {
        this.value = value;
        prevNode = null;
    }

    public int getValue() {
        return value;
    }

    public StackNode getPrevNode() {
        return prevNode;
    }

    public void setPrevNode(StackNode prevNode) {
        this.prevNode = prevNode;
    }
}

class NodeManager {
    private StackNode top;
    private int size;

    public NodeManager() {
        top = null;
        size = 0;
    }

    public StackNode getTop() {
        return top;
    }

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

    public int getSize() {
        return size;
    }

    public void push(StackNode node) {
        if (isEmpty()) top = node;
        else {
            node.setPrevNode(top);
            top = node;
        }
        size++;
    }

    public int pop() {
        if (isEmpty()) return -1;
        StackNode node = top;
        top = top.getPrevNode() == null ? null : top.getPrevNode();
        size--;
        return node.getValue();
    }

    public int peek() {
        return isEmpty() ? -1 : top.getValue();
    }
}