Languages/Java

[BOJ 길라잡이/Java] 4일차 #10828 스택

효딩 2025. 3. 11. 00:05

 

알고리즘 분류

- 구현

- 자료 구조

- 스택

 

https://www.acmicpc.net/problem/10828

문제 제목이 그렇듯,

스택 문제다.

 

문제가 복잡하진 않고 주어진 조건대로

스택에서 push, pop, size, peek 등을 활용하면 된다.

 

작성한 코드는 다음과 같다.

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

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int N = Integer.parseInt(br.readLine());
        Stack<Integer> stack = new Stack<>();
        StringBuilder sb = new StringBuilder();

        for (int i = 0; i < N; i++) {
            StringTokenizer st = new StringTokenizer(br.readLine());
            String com = st.nextToken();
            if (com.equals("push")) {
                int pushNum = Integer.parseInt(st.nextToken());
                stack.push(pushNum);
            }
            else if (com.equals("pop")) {
                if (stack.size() == 0) {
                    sb.append(-1);
                } else {
                    sb.append(stack.pop());
                }
                sb.append("\n");
            }
            else if (com.equals("size")) {
                sb.append(stack.size());
                sb.append("\n");
            }
            else if (com.equals("empty")) {
                if (stack.size() == 0) {
                    sb.append(1);
                } else {
                    sb.append(0);
                }
                sb.append("\n");
            }
            else if (com.equals("top")) {
                if (stack.size() == 0) {
                    sb.append(-1);
                } else {
                    sb.append(stack.peek());
                }
                sb.append("\n");
            }
        }

        System.out.println(sb.toString());
    }
}

pop 하지 않고 스택의 가장 위에 있는 정수를 출력할 때는

peek() 메서드를 사용한다는 것만 잘 기억해두면 될 것 같다.

 

StringBuilder를 사용하긴 했는데

그대로 print해도 복잡도에 큰 차이가 없었다.