나는 이걸 ArrayList로 구현을 했는데(양심상 Stack을 그대로 쓰는건 좀 그랬다.) 사람들이 제출한 답안을 보니 그냥 Stack을 썻다.
자바에서는 Stack을 어떻게 구현했을까? 하고 살펴보니 이 사람들도 JDK1.0부터 내려온지라 Vector를 확장하여 쓰는 잘못을 하고 있었다고 한다. 그래서 ArrayDeque라는 친구를 쓰는 것을 권장한다.
ArrayDeque 사용방법 링크 : https://github.com/wjdrbs96/Today-I-Learn/blob/master/Java/Collection/Queue/ArrayDeque%EB%9E%80%3F.md
package stack;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayList;
public class No10828 {
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
ArrayList<Integer> arr = new ArrayList<Integer>();
No10828 stack = new No10828();
int count = Integer.parseInt(br.readLine());
for (int i = 0; i < count; i++) {
String input = br.readLine();
stack.statement(arr, input);
}
}
public void statement(ArrayList<Integer> arr, String input) throws Exception {
if ("pop".equals(input)) {
System.out.println(pop(arr));
} else if ("top".equals(input)) {
System.out.println(top(arr));
} else if ("size".equals(input)) {
System.out.println(size(arr));
} else if ("empty".equals(input)) {
System.out.println(empty(arr));
} else {
push(arr, input);
}
}
public int pop(ArrayList<Integer> arr) {
if (arr.size() == 0) {
return -1;
}
int result = arr.get(arr.size() - 1);
arr.remove(arr.size() - 1);
return result;
}
public int top(ArrayList<Integer> arr) {
if (arr.size() == 0) {
return -1;
}
return arr.get(arr.size() - 1);
}
public int size(ArrayList<Integer> arr) {
return arr.size();
}
public int empty(ArrayList<Integer> arr) {
if (arr.size() == 0) {
return 1;
} else {
return 0;
}
}
public void push(ArrayList<Integer> arr, String input) {
int number = Integer.parseInt(input.substring(5));
arr.add(number);
}
}