Blog

백준 10828: 스택 명령 처리와 빈 스택 확인

백준 10828번 ‘스택’은 입력된 명령에 따라 값을 넣거나 꺼내고 크기와 맨 위의 값을 출력하는 문제입니다. Java의 Stack<Integer>를 사용하고 switch문으로 명령을 나눴습니다.

push만 숫자를 하나 더 읽습니다

한 줄을 읽으면 첫 토큰은 명령어입니다. push에는 넣을 숫자가 뒤따르므로 이 경우에만 nextToken()을 한 번 더 호출합니다.

pop과 top은 스택이 비어 있으면 -1을 출력합니다. 비어 있지 않을 때 pop()은 값을 꺼냅니다. peek()은 맨 위의 값을 꺼내지 않고 확인하는데 빈 스택에서 호출하면 오류가 나므로 top에도 빈 스택인지 확인하는 조건이 필요합니다.

empty는 비어 있으면 1, 그렇지 않으면 0을 출력합니다. size는 현재 들어 있는 값의 개수를 출력하면 됩니다.

당시 제출 코드

Java
import java.io.*;
import java.util.*;

class Main {

    static BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st;
        Stack<Integer> stack = new Stack<>();

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

        String cmd;
        int x = 0;
        for (int i = 0; i < N; i++) {
            st = new StringTokenizer(br.readLine()," ");
            cmd = st.nextToken();
            if (cmd.equals("push")) {
                x = Integer.parseInt(st.nextToken());
            }
            switch (cmd) {
                case "push":
                    stack.push(x);
                    break;
                case "pop":
                    if (stack.isEmpty()) {
                        bw.write("-1");
                        bw.write("\n");
                    } else {
                        bw.write(String.valueOf(stack.pop()));
                        bw.write("\n");
                    }
                    break;
                case "size":
                    bw.write(String.valueOf(stack.size()));
                    bw.write("\n");
                    break;
                case "empty":
                    if (stack.isEmpty()) {
                        bw.write(String.valueOf(1));
                        bw.write("\n");
                    } else {
                        bw.write(String.valueOf(0));
                        bw.write("\n");
                    }
                    break;
                case "top":
                    if (stack.isEmpty()) {
                        bw.write("-1");
                        bw.write("\n");
                    } else {
                        bw.write(String.valueOf(stack.peek()));
                        bw.write("\n");
                    }
                    break;
                default:
                    break;
            }
        }
        bw.flush();
    }
}