코딩테스트/백준

[백준 - JAVA] 28278 - 스택2

kittae 2024. 12. 11. 09:56

스택을 입문하기 좋은 매우 쉬운 문제다!

 

필자는 3년 전 C++로 코딩테스트 문제를 많이 풀었을 때, 거의 대부분 배열을 stack, vector으로 구현했었다.

그래서 그런지 오랜만에 회고하는데도 큰 무리 없이 쉽게 푼 것 같다!

 

메모리 제한과 시간제한은 충분하다고 판단했다! 

 

나의 구현 로직이다

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

for 문 사용, switch문 사용

 

[최종 코드]

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

public class Main {
    public static void main(String[] args) throws IOException {

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        Stack<Integer> s = new Stack<>();
        int n = Integer.parseInt(br.readLine());

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

            switch(Integer.parseInt(st.nextToken())) {

                case 1:
                    s.push(Integer.parseInt(st.nextToken()));
                    break;

                case 2:
                    if (!s.empty())
                        System.out.println(s.pop());
                    else
                        System.out.println(-1);
                    break;

                case 3:
                    System.out.println(s.size());
                    break;

                case 4:
                    if (s.empty())
                        System.out.println(1);
                    else
                        System.out.println(0);
                    break;

                case 5:
                    if (!s.empty())
                        System.out.println(s.peek());
                    else
                        System.out.println(-1);
                    break;

                default:
                    break;
            }
        }
    }
}

 

배운점

오랜만에 스택 알고리즘을 회고하는 문제였다! 차차 큐나 덱도 공부하면서 회고해야겠다고 생각했다!