deep_lee 2022. 10. 3. 21:42

문제

μ •μˆ˜λ₯Ό μ €μž₯ν•˜λŠ” μŠ€νƒμ„ κ΅¬ν˜„ν•œ λ‹€μŒ, μž…λ ₯으둜 μ£Όμ–΄μ§€λŠ” λͺ…령을 μ²˜λ¦¬ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•˜μ‹œμ˜€.

λͺ…령은 총 λ‹€μ„― 가지이닀.

  • push X: μ •μˆ˜ Xλ₯Ό μŠ€νƒμ— λ„£λŠ” 연산이닀.
  • pop: μŠ€νƒμ—μ„œ κ°€μž₯ μœ„μ— μžˆλŠ” μ •μˆ˜λ₯Ό λΉΌκ³ , κ·Έ 수λ₯Ό 좜λ ₯ν•œλ‹€. λ§Œμ•½ μŠ€νƒμ— λ“€μ–΄μžˆλŠ” μ •μˆ˜κ°€ μ—†λŠ” κ²½μš°μ—λŠ” -1을 좜λ ₯ν•œλ‹€.
  • size: μŠ€νƒμ— λ“€μ–΄μžˆλŠ” μ •μˆ˜μ˜ 개수λ₯Ό 좜λ ₯ν•œλ‹€.
  • empty: μŠ€νƒμ΄ λΉ„μ–΄μžˆμœΌλ©΄ 1, μ•„λ‹ˆλ©΄ 0을 좜λ ₯ν•œλ‹€.
  • top: μŠ€νƒμ˜ κ°€μž₯ μœ„μ— μžˆλŠ” μ •μˆ˜λ₯Ό 좜λ ₯ν•œλ‹€. λ§Œμ•½ μŠ€νƒμ— λ“€μ–΄μžˆλŠ” μ •μˆ˜κ°€ μ—†λŠ” κ²½μš°μ—λŠ” -1을 좜λ ₯ν•œλ‹€.

μž…λ ₯

첫째 쀄에 μ£Όμ–΄μ§€λŠ” λͺ…λ Ήμ˜ 수 N (1 ≤ N ≤ 10,000)이 μ£Όμ–΄μ§„λ‹€. λ‘˜μ§Έ 쀄뢀터 N개의 μ€„μ—λŠ” λͺ…령이 ν•˜λ‚˜μ”© μ£Όμ–΄μ§„λ‹€. μ£Όμ–΄μ§€λŠ” μ •μˆ˜λŠ” 1보닀 ν¬κ±°λ‚˜ κ°™κ³ , 100,000보닀 μž‘κ±°λ‚˜ κ°™λ‹€. λ¬Έμ œμ— λ‚˜μ™€μžˆμ§€ μ•Šμ€ λͺ…령이 μ£Όμ–΄μ§€λŠ” κ²½μš°λŠ” μ—†λ‹€.

좜λ ₯

좜λ ₯ν•΄μ•Όν•˜λŠ” λͺ…령이 μ£Όμ–΄μ§ˆ λ•Œλ§ˆλ‹€, ν•œ 쀄에 ν•˜λ‚˜μ”© 좜λ ₯ν•œλ‹€.

예제 μž…λ ₯ 1 

14
push 1
push 2
top
size
empty
pop
pop
pop
size
empty
pop
push 3
empty
top

예제 좜λ ₯ 1 λ³΅μ‚¬

2
2
0
2
1
-1
0
1
-1
0
3

예제 μž…λ ₯ 2 λ³΅μ‚¬

7
pop
top
push 123
top
pop
top
pop

예제 좜λ ₯ 2 λ³΅μ‚¬

-1
-1
123
123
-1
-1

μŠ€νƒμ„ μ΄ν•΄ν•˜κ³ μžˆλŠλƒ λ§ˆλƒμ˜ λ¬Έμ œμ˜€λ‹€. 

 

push, pop, size, empty, top 5κ°€μ§€μ˜ λ©”μ†Œλ“œλ₯Ό κ΅¬ν˜„ν•˜κ³ 

λ°°μ—΄κ³Ό μš”μ†Œμ˜κ°œμˆ˜(size)λ₯Ό μ΄μš©ν•œλ‹€.

( sizeλŠ” λ°°μ—΄μ˜ 크기가 μ•„λ‹ˆλΌ 'μš”μ†Œ(데이터)의 개수' 이닀. )

 


 

import java.util.*;
public class Main {

    public static int[] stack;
    public static int size=0;

    public static void main(String[] args) {
        Scanner kb=new Scanner(System.in);
        StringBuilder sb=new StringBuilder();

        int N=kb.nextInt();
        stack = new int[N];

        for(int i=0; i<N; i++){
            String str=kb.next();

            switch(str){

                case "push":
                    push(kb.nextInt());
                    break;

                case "pop":
                    sb.append(pop()).append('\n');
                    break;

                case "size":
                    sb.append(size()).append('\n');
                    break;

                case "empty":
                    sb.append(empty()).append('\n');
                    break;

                case "top":
                    sb.append(top()).append('\n');
                    break;
            }
        }
        System.out.println(sb);
    }

    public static void push(int item){
        stack[size]=item;
        size++;
    }

    public static int pop(){
        if(size==0){
            return -1;
        }
        else{
            int res=stack[size-1];
            stack[size-1]=0;
            size--;
            return res;
        }
    }

    public static int size(){
        return size;
    }

    public static int empty(){
        if(size==0){
            return 1;
        }
        else{
            return 0;
        }
    }

    public static int top(){
        if(size==0){
            return -1;
        }
        else{
            return stack[size-1];
        }
    }
}