[Baekjoon] #28278 스택2

현굥·2024년 8월 17일

BaekJoon

목록 보기
11/53


문제이해

정수를 저장하는 stack을 구현 한 다음, 입력으로 주어지는 명령을 처리해야 한다.
명령별로 다섯가지의 케이스가 나누어집니다.

입력

  • 첫째 줄에 명령의 수 N이 주어진다. (1 ≤ N ≤ 1,000,000)
  • 둘째 줄부터 N개 줄에 명령이 하나씩 주어진다.
  • 출력을 요구하는 명령은 하나 이상 주어진다.

출력

  • 출력을 요구하는 명령이 주어질 때마다 명령의 결과를 한 줄에 하나씩 출력한다.

문제접근

  1. 제일 먼저 스택을 구현하기 위한 방법에 대해 떠올려야합니다.
    스택 선언을 위해 ArrayDeque<> 를 사용했습니다.

  2. 첫번째 줄에 명령의 수가 주어지고, 두번째줄부터 첫번째 줄에 입력받았던 명령의 수 만큼 명령이 하나씩 주어지고, 주어진 번호에 해당하는 케이스 별로 스택연산을 해야합니다.

  1. 명령의 수를 입력받고, for문을 통해 첫번째 줄에 입력받았던 명령의 수 만큼 반복하여 각 입력에 해당하는 케이스를 처리할 수 있도록 switch문을 활용했습니다.

  2. 두번째 줄부터 들어오는 입력은, StringTokenizer를 이용하여 입력문자를 토큰화한 다음, 이를 정수로 변환한 다음 switch 문으로 넘겨 해당 case에 해당하는 연산을 수행하도록 하였습니다.

  3. 결과는 StringBuilder를 선언하여 결과값을 저장해주었고, 추가적으로 삼항연산자를 이용했습니다.

code

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayDeque;
import java.util.StringTokenizer;
import java.io.IOException;


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

        for(int i=0; i<n ; i++ ){
            StringTokenizer st = new StringTokenizer(br.readLine());
            int command = Integer.parseInt(st.nextToken());

        switch (command) {
            case 1:
                int num = Integer.parseInt(st.nextToken());
                stack.push(num);
                break;
            case 2:
                if (stack.isEmpty()) {
                    sb.append(-1).append("\n");
                } else {
                    sb.append(stack.pop()).append("\n");
                }
                break;
            case 3:
                sb.append(stack.size()).append("\n");
                break;
            case 4:
                sb.append(stack.isEmpty() ? 1 : 0).append("\n");
                break;
            case 5:
                sb.append(stack.isEmpty() ? -1 : stack.peek()).append("\n");
                break;
        }


        }


    System.out.println(sb);


    } }

0개의 댓글