© 2025 anveloper.dev
GitHub·LinkedIn·Contact

목차

  • 문제
  • 입력
  • 출력
  • 예제
  • 풀이
  • 코드
  • 복잡도
풀이 목록으로 돌아가기

BOJ 28278 - 스택 2

2023-12-20
BOJ
실버 IV
java
원본 문제 보기
자료 구조
스택

문제

BOJ 28278 - 스택 2

정수를 저장하는 스택에 대해 5가지 명령(push, pop, size, isEmpty, peek)을 처리하라.

입력

첫째 줄에 명령의 수 N, 이후 N줄에 명령이 주어진다.

출력

각 명령에 대해 해당하는 결과를 출력한다. 비어 있을 때 pop/peek은 -1을 출력한다.

예제

입력출력
9 1 1 1 2 1 3 1 4 1 5 5 2 4 35 5 0 4

풀이

Java의 Stack을 사용하여 5가지 명령을 분기 처리한다.

  1. 명령 번호를 파싱하여 1이면 push, 2이면 pop, 3이면 size, 4이면 isEmpty, 5이면 peek을 수행한다
  2. pop과 peek은 스택이 비어 있으면 -1을 출력한다
  3. StringBuilder로 출력을 모아 한 번에 출력한다

핵심 아이디어: 단순한 스택 연산 구현 문제로, 출력을 StringBuilder로 모아 I/O 효율을 높인다.

코드

package day699;
 
import java.io.*;
import java.util.*;
 
public class Day683BOJ28278스택2 {
  public static void main(String[] args) throws Exception {
 
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    int time = Integer.parseInt(br.readLine());
 
    Stack<Integer> stack = new Stack<>();
    StringBuilder sb = new StringBuilder();
 
    for (int i = 0; i < time; i++) {
      String order = br.readLine();
      StringTokenizer st = new StringTokenizer(order);
      int A = Integer.parseInt(st.nextToken());
 
      if (A == 1) {
        int X = Integer.parseInt(st.nextToken());
        stack.push(X);
      }
 
      if (A == 2) {
        if (stack.isEmpty()) {
          sb.append(-1).append("\n");
          continue;
        }
        sb.append(stack.pop()).append("\n");
      }
 
      if (A == 3) {
        sb.append(stack.size()).append("\n");
      }
 
      if (A == 4) {
        if (stack.isEmpty()) {
          sb.append(1).append("\n");
          continue;
        }
        sb.append(0).append("\n");
      }
 
      if (A == 5) {
        if (stack.isEmpty()) {
          sb.append(-1).append("\n");
          continue;
        }
        sb.append(stack.peek()).append("\n");
      }
    }
    System.out.println(sb);
  }
}

복잡도

  • 시간: O(N)
  • 공간: O(N)