스택

25 June 2019

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

이번은 스택을 구현하는 문제를 풀어보도록 하겠습니다.

import java.util.Scanner;

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

        Scanner sc = new Scanner(System.in);

        int size = sc.nextInt();

        Stack stack = new Stack(10000);

        for (int i = 0; i < size; i++) {
            String command = sc.next();
            switch (command) {
                case "push":
                    int val = sc.nextInt();
                    stack.push(val);
                    break;
                case "pop":
                    System.out.println(stack.pop());
                    break;
                case "size":
                    System.out.println(stack.size());
                    break;
                case "empty":
                    System.out.println(stack.empty());
                    break;
                case "top":
                    System.out.println(stack.top());
                    break;
            }
        }
    }
}

class Stack {
    private int top = -1;
    private int[] queue;

    public Stack(int max) {
        queue = new int[max];
    }

    public void push(int val) {
        top++;
        queue[top] = val;
    }

    public int pop() {
        if (top == -1) {
            return -1;
        }
        int val = queue[top];
        top--;
        return val;
    }

    public int size() {
        return top + 1;
    }

    public int empty() {
        if (top == -1) {
            return 1;
        }
        return 0;
    }

    public int top() {
        if (top == -1) {
            return -1;
        }
        return queue[top];
    }
}
먼저 class를 통해 stack을 구현하고, 들어오는 값에 따라 출력을 해주도록 합니다.
stack은 내부적으로 array를 통해 구현을 진행합니다.