문제

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

명령은 총 다섯 가지이다.

  • push X: 정수 X를 스택에 넣는 연산이다.
  • pop: 스택에서 가장 위에 있는 정수를 빼고, 그 수를 출력한다. 만약 스택에 들어있는 정수가 없는 경우에는 -1을 출력한다.
  • size: 스택에 들어있는 정수의 개수를 출력한다.
  • empty: 스택이 비어있으면 1, 아니면 0을 출력한다.
  • top: 스택의 가장 위에 있는 정수를 출력한다. 만약 스택에 들어있는 정수가 없는 경우에는 -1을 출력한다.

 

입력

첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지 않은 명령이 주어지는 경우는 없다.

 

출력

출력해야 하는 명령이 주어질 때마다, 한 줄에 하나씩 출력한다.


코드

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

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

        for(int i = 0; i < N; i++){
            String[] st = br.readLine().split(" ");
            if(st[0].equals("push")){
                stack.push(st[1]);
            }else if(st[0].equals("pop")){
                if(stack.isEmpty()){
                    System.out.println("-1");
                }else{
                    System.out.println(stack.pop());
                }
            }else if(st[0].equals("size")){
                System.out.println(stack.size());
            }else if(st[0].equals("empty")){
                if(stack.isEmpty()){
                    System.out.println(1);
                }else{
                    System.out.println(0);
                }
            }else if(st[0].equals("top")){
                if(stack.isEmpty()){
                    System.out.println("-1");
                }else{
                    System.out.println(stack.peek());
                }
            }
        }
    }
}

 

풀이

스택에 대해 간단히 설명하면 바닥이 막힌 바구니에 쌓는 것이라고 생각하면 된다. 바구니에 상자를 넣는다면, 제일 처음 넣은 상자가 아래에 깔리게 된다. 그리고 상자를 바구니에서 빼려면 제일 위에 있는 상자가 먼저 빠지게 되는 구조이다.

 

push 경우에는 뒤에 스택에 넣을 숫자가 오기 때문에 realine()으로 한 줄을 입력받고 split으로 배열에 저장해주었다. push라면 배열에 [push, 숫자] 이렇게 저장이 될 것이고, size 같은 것은 [size] 이렇게 저장이 될 것이다.

push x는 x를 스택에 넣어야 하기 때문에 실제 스택에 있는 함수인 push 함수를 이용했다.

pop은 스택에 아무것도 없으면 -1을 출력하고, 수가 존재하면 제일 위의 정수를 스택에서 제거하면서 출력해야 한다. 따라서 스택의 isEmpty() 함수로 스택이 비어있는지 확인하고 비어있다면 -1을 출력한다. 스택이 비어있지 않다면 pop() 함수를 이용해 스택에서 제일 위에 있는 수를 스택에서 제거하면서 출력한다.

size는 스택에 있는 size() 함수를 이용했고, empty의 경우 isEmpty()를 이용했다.

top의 경우 pop의 의미와 비슷하지만 스택에서 제거는 하면 안되고 출력만 해야 하기 때문에 peek()을 이용해 제일 위에 있는 수를 출력했다.

 

 

728x90

'Algorithm > 백준' 카테고리의 다른 글

[백준][Java] 2525. 오븐 시계  (0) 2022.04.05
[백준][Python] 10773. 제로  (0) 2022.03.27
[백준][Python] 9461. 파도반 수열  (0) 2022.03.25
[백준][Python] 11399. ATM  (0) 2022.03.23
[백준][Python] 1931. 회의실 배정  (0) 2022.03.23

+ Recent posts