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];
}
}