[백준] 10828번 Java (Stack)

동은·2024년 9월 25일
post-thumbnail

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

💡문제

풀이

  • Stack을 사용해서 쉽게 풀 수도 있지만, 문제의 의도를 생각해서 스택을 구현해봤다.
  • 배열(arr)을 사용하여 간단한 형태의 스택을 구현하면 된다.
  • 현재 스택의 꼭대기(=가장 최근 값)이 배열의 어디에 해당하는지 top을 활용했다.

  • push(A) : top의 크기를 하나 증가 시키고, arr[top]에 A를 할당한다.
  • pop(A) : arr[top]의 값을 반환하고, top의 크기를 하나 감소한다.
  • size : 스택의 크기, top + 1 이다.
  • empty : top의 기본값이 -1이므로 -1인지 확인한다.
  • top : 최상단 값이므로 arr[top] 이다.

내 코드

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

public class Main {
    private static int[] stack;
    private static int top = -1;	// 스택의 현재 위치를 나타내는 가장 위 인덱스
    private static final int EMPTY = -1; // 스택이 비어있을 때 상수

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

        for (int i = 0; i < n; i++) {
            String[] order = br.readLine().split(" ");
            executeCommand(order);

        }
    }

    private static void executeCommand(String[] order) {
        switch (order[0]) {
            case "push":
                push(Integer.parseInt(order[1]));
                break;
            case "pop":
                System.out.println(pop());
                break;
            case "size":
                System.out.println(size());
                break;
            case "empty":
                System.out.println(empty());
                break;
            case "top":
                System.out.println(top());
                break;
        }
    }

    // 스택에 값 추가
    public static void push(int x) {
        if (top < stack.length - 1) {
            stack[++top] = x;
        }
    }

    // 스택에서 값 제거 후 반환
    public static int pop() {
        return top == EMPTY ? EMPTY : stack[top--];

    }

    // 스택의 크기 반환
    public static int size() {
        return top + 1;
    }

    // 스택이 비었는지 확인
    public static int empty() {
        return top == EMPTY ? 1 : 0;
    }

    // 스택의 최상단 값 반환
    public static int top() {
        return top == EMPTY ? EMPTY : stack[top];
    }
}

0개의 댓글