본문 바로가기

알고리즘 자료구조/백준

[백준] 10828 스택

728x90

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

 

10828번: 스택

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

www.acmicpc.net

 

🖊️문제

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

명령은 총 다섯 가지이다.

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

입력

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

 

 

🖊️문제 풀이

스택이 무슨 자료구존지 알면 금방 풀 수 있는 문제였다.

스택(Stack)은 후입선출의 구조를 갖는다.

1, 2, 3의 숫자를 순서대로 넣었을 경우, 스택에서 값을 지우면서 출력하면 3, 2, 1의 순서대로 출력된다.

 

  • push는 stack.push( )와 같은 역할을 하는 명령으로 스택의 맨 끝에 데이터를 추가해주는 명령이다.
  • pop은 stack.pop( )과 같은 역할을 하는데 1, 2, 3의 순서대로 스택에 들어가있을 경우 pop을 해주면 3이 스택에서 제거되게 된다.
  • size는 stack.size( )와 같은 명령으로 스택의 길이를 확인할 수 있다.
  • empty는 스택이 비어있는 지 확인하는 명령어이다.
  • top은 stack.peek( )과 같은 역할을 수행하는데, 데이터를 제거하는 pop과는 다르게 단순히 맨 끝에 있는 데이터를 확인하는 명령어이다.

 

요걸 이용해서 문제를 풀어주면 되는데 나는 쪼끔 쉽게 풀기 위해서 ArrayList를 이용해 스택을 구현해주었다.

 

🖊️코드

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

public class P10828 {

  public static void main(String[] args) throws IOException {
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    StringTokenizer st = new StringTokenizer(br.readLine());
    int n = Integer.parseInt(st.nextToken());
    ArrayList<Integer> stack = new ArrayList<>();

    for (int i = 0; i < n; i++) {
      st = new StringTokenizer(br.readLine());
      String s = st.nextToken();

      if(s.equals("push")){
        int num = Integer.parseInt(st.nextToken());
        stack.add(num);
      }else if(s.equals("pop")){
        if(stack.isEmpty()){
          System.out.println("-1");
        }else{
          System.out.println(stack.remove(stack.size()-1));
        }
      }else if(s.equals("size")){
        System.out.println(stack.size());
      }else if (s.equals("empty")){
        if(stack.isEmpty()){
          System.out.println("1");
        }else{
          System.out.println("0");
        }
      } else if (s.equals("top")) {
        if(stack.isEmpty()){
          System.out.println("-1");
        }else{
          System.out.println(stack.get(stack.size()-1));
        }
      }
    }
  }

}

 

 

728x90

'알고리즘 자료구조 > 백준' 카테고리의 다른 글

[백준] P2003 수들의 합2  (0) 2024.03.03
[백준] P2606 바이러스  (0) 2024.03.01
[백준] 11399 ATM  (0) 2023.09.17
[백준]1377 버블 소트  (0) 2023.09.17
[백준] 11286 절댓값 힙  (0) 2023.08.30