(Java) 백준 28278번 - 스택 2

코딩너구리·2026년 2월 21일

코딩 문제 풀이

목록 보기
232/266

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

문제

> 정수를 저장하는 스택을 구현한 다음, 
입력으로 주어지는 명령을 처리하는 프로그램을 작성하시오.

> 명령은 총 다섯 가지이다.

1 X: 정수 X를 스택에 넣는다. (1 ≤ X ≤ 100,000)
2: 스택에 정수가 있다면 맨 위의 정수를 빼고 출력한다.
   없다면 -1을 대신 출력한다.
3: 스택에 들어있는 정수의 개수를 출력한다.
4: 스택이 비어있으면 1, 아니면 0을 출력한다.
5: 스택에 정수가 있다면 맨 위의 정수를 출력한다. 
   없다면 -1을 대신 출력한다.

접근

스택을 사용하여 문제에 주어진 스택의 기능을 구현한다.

문제해결

> 명령어의 개수 N을 입력받고 while문을 돌린다. 사용할 스택을 정수형으로 s로 선언한다.
> 각각의 1~5에 대한 명령어를 cmd로 입력받고 1번일때의 추가입력을 X에 입력받는다.
> switch문을 사용하여 명령어 별로 기능을 구현한다.
> 1은 단순 삽입으로 add를 사용한다.
> 2,3,4,5는 각각 스택의 비어있음 여부가 필요하므로 isEmpty()로 확인해주고 참,거짓에 따라 구현한다.
> 3번은 size()로 원소의 개수를 반환하고, 4번은 isEmpty()로 빔, 안빔 여부를 반환한다.
> 2번은 제거 및 출력이므로 pop()을 사용하고 5번은 출력만이므로 peek()로 반환해준다.

코드

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

public class Main {
    //28278번 스택2
    static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    static StringTokenizer st;
    static StringBuilder sb = new StringBuilder();
    public static void main(String[] args) throws IOException {
        int N = Integer.parseInt(br.readLine());
        Stack<Integer> s = new Stack<>();
        while(N-->0) {
            st = new StringTokenizer(br.readLine());
            int cmd = Integer.parseInt(st.nextToken());
            int X = 0;
            if(st.hasMoreTokens()) X = Integer.parseInt(st.nextToken());
            switch(cmd) {
                case 1:
                    s.add(X);
                    break;
                case 2:
                    if(s.isEmpty()) sb.append(-1).append('\n');
                    else sb.append(s.pop()).append('\n');
                    break;
                case 3:
                    sb.append(s.size()).append('\n');
                    break;
                case 4:
                    if(s.isEmpty()) sb.append(1).append('\n');
                    else sb.append(0).append('\n');
                    break;
                case 5:
                    if(s.isEmpty()) sb.append(-1).append('\n');
                    else sb.append(s.peek()).append('\n');
                    break;
                default:
                    break;
            }
        }
        System.out.print(sb);
    }
}

후기

스택의 세부기능을 알게 되었다.
pop()은 큐의 poll같은 기능을 한다고 한다.

0개의 댓글