[백준(JAVA)] 10828번: 스택

세하·2025년 4월 26일

[백준] 문제풀이

목록 보기
46/94
post-thumbnail

문제

✔ 난이도 - Silver 4

설명

스택에 대해 알고 있다면 바로 풀 수 있는 문제
https://velog.io/@seha01130/JAVA-스택Stack-정리

출력할때마다 .append("\n")를 붙여주면 마지막까지 개행문자가 들어가게된다. 백준플랫폼에서는 출력 전체를 문자열로 보고 마지막 개행문자는 무시하기때문에 정답으로 인정해주지만 다른 플랫폼은 더욱 엄격하게 조건을 걸 수도 있다. 따라서 switch문을 빠져나온 이후 push가 아닌 조건이면서 맨 마지막 입력이 아닐때만 개행문자를 붙여주도록 했다.

풀이

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Stack;
import java.util.StringTokenizer;

public class Main {
    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringBuilder sb = new StringBuilder();

        Stack<Integer> stack = new Stack<>();
        int N = Integer.parseInt(br.readLine());

        String type;
        int num = 0;
        for (int i = 0; i < N; i++){

            StringTokenizer st = new StringTokenizer(br.readLine(), " ");
            type = st.nextToken();
            if (st.hasMoreTokens()){
                num = Integer.parseInt(st.nextToken());
            }

            switch(type){
                case "push":
                    stack.push(num);
                    break;
                case "pop":
                    if (stack.isEmpty()){
                        sb.append(-1);
                    } else {
                        sb.append(stack.pop());
                    }
                    break;
                case "size":
                    sb.append(stack.size());
                    break;
                case "empty":
                    if (stack.isEmpty()){
                        sb.append(1);
                    } else {
                        sb.append(0);
                    }
                    break;
                case "top":
                    if (stack.isEmpty()){
                        sb.append(-1);
                    } else {
                        sb.append(stack.peek());
                    }
                    break;
                default:
                    break;
            }

            if (!type.equals("push") && i < N - 1){
                sb.append("\n");
            }
        }

        System.out.println(sb);
    }
}

TIL💡

📌 자바에서 문자열 비교는 == 또는 != 비교를 쓰면 문자열 자체를 비교하는 것이 아닌, 참조(메모리 주소)를 비교한다. 따라서 !type.equals("push") 이런 식으로 비교해줘야함! 너무 기초적인건데 실수를 했다. 충격,,, 뭐든 꼼꼼히 보고 생각하자!

0개의 댓글