본문 바로가기
백준

[백준] 28278번 : 스택 2 – JAVA [자바]

by Hongwoo 2025. 2. 25.
반응형

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

 

 


문제


문제 풀이

문제 해결 방법:

1. 스택 자료구조 활용

  • 주어진 명령어가 스택과 밀접한 연관이 있으므로 Stack<Integer> 클래스를 사용하면 쉽게 구현할 수 있다.

2. 조건문을 활용한 명령어 처리

  • 명령어를 하나씩 읽고 해당하는 동작을 수행한다.
  • 명령어 1 X인 경우 stack.push(X)를 수행한다.
  • 명령어 2는 stack.pop()을 수행하며, 비어 있다면 -1을 출력한다.
  • 명령어 3은 stack.size()를 출력한다.
  • 명령어 4는 stack.isEmpty()를 이용하여 출력값을 결정한다.
  • 명령어 5는 stack.peek()을 출력하며, 비어 있으면 -1을 출력한다.

코드

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

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

        for (int i = 0; i < n; i++) {
            StringTokenizer st = new StringTokenizer(br.readLine());
            int instruction = Integer.parseInt(st.nextToken());
            if (instruction == 1) {
                int x = Integer.parseInt(st.nextToken());
                stack.push(x);
            }

            if (instruction == 2) {
                if (stack.isEmpty()) {
                    sb.append("-1\n");
                } else {
                    sb.append(stack.pop() + "\n");
                }
            }

            if (instruction == 3) {
                sb.append(stack.size() + "\n");
            }

            if (instruction == 4) {
                if (stack.isEmpty()) {
                    sb.append("1\n");
                } else {
                    sb.append("0\n");
                }
            }

            if (instruction == 5) {
                if (stack.isEmpty()) {
                    sb.append("-1\n");
                } else {
                    sb.append(stack.peek() + "\n");
                }
            }
        }
        System.out.print(sb);
    }
}

 

 


코드 설명

입력 처리: O(N) (BufferedReader 사용)

 

명령 처리:

  • push(X): O(1)
  • pop(): O(1)
  • size(): O(1)
  • isEmpty(): O(1)
  • peek(): O(1) 

출력 처리: O(N) (StringBuilder 사용)

전체 복잡도: O(N)

반응형

댓글