[Java] 백준 28278번: 스택 2

hansung's·2024년 3월 18일
0

문제 url:
스택 2

문제:

🤔 문제 알아보기


제목부터가 스택을 사용하라는 문제이다.
문제 자체는 어렵지 않다. 주어진 명령에 따라 출력을 하면 되기 때문이다.
즉 이번 문제는 스택을 사용해서 나타낼 수 있는가 없는가를 판단하는 문제이기 때문에
문제를 알아보기 보단 stack에 대해 알아보고 가자

다행히, 이번에 해당 카테고리를 공부하면서 정리한 것이 있다. 아래 링크를 통해 stack에 대해 정리한 것을 간략히 읽어보면 좋을 것 같다.
[Java] 스택(stack) 클래스 정리 & 사용법

🐱‍👤 실제 코드


import java.io.*;
import java.util.ArrayList;
import java.util.List;
import java.util.Stack;
import java.util.StringTokenizer;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringBuilder sbd = new StringBuilder();

        int N = Integer.parseInt(br.readLine());
        List<Integer> stack = new ArrayList<>();

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

            int order = Integer.parseInt(st.nextToken());

            if(order == 1 && st.hasMoreTokens()) {
                stack.add(Integer.parseInt(st.nextToken()));
                continue;
            }

            switch(order) {
                case 2:
                    if(!stack.isEmpty()) {
                        sbd.append(stack.get(stack.size()-1)).append("\n");
                        stack.remove(stack.size()-1);

                    } else {
                        sbd.append(-1).append("\n");
                    }
                    break;
                case 3:
                    sbd.append(stack.size()).append("\n");
                    break;

                case 4:
                    if(stack.isEmpty()) {
                        sbd.append(1).append("\n");
                    } else {
                        sbd.append(0).append("\n");
                    }
                    break;

                case 5:
                    if(!stack.isEmpty()) {
                        sbd.append(stack.get(stack.size()-1)).append("\n");
                    } else {
                        sbd.append(-1).append("\n");
                    }
                    break;
            }


        }
        System.out.println(sbd);


    }
}

스택에 대한 문제인데, 왜 스택을 사용하지 않았나요??
이번에는 스택과 달리 스택형태로 사용하는 ArrayList를 구현해보았다.

물론 ArrayList가 LIFO 자료구조를 가지진 않았지만, stack에 대한 구조를 좀 더 이해 해보고자 이렇게 풀어보았다.

profile
ABAPER를 꿈꾸는 개발자

0개의 댓글