제출코드
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
List<String> list = new ArrayList<>();
Stack<Integer> stack = new Stack<>();
int repeat = Integer.parseInt(br.readLine());
for (int i = 0; i < repeat; i++) {
String input = br.readLine();
list.add(input);
}
for (String str : list) {
function(str, stack);
}
}
static void function(String str, Stack<Integer> stack) {
if (str.contains("push")) {
String[] splitList = str.split(" ");
int number = Integer.parseInt(splitList[1]);
push(number, stack);
}
if (str.equals("pop")) {
pop(stack);
}
if (str.equals("size")) {
size(stack);
}
if (str.equals("empty")) {
empty(stack);
}
if (str.equals("top")) {
top(stack);
}
}
static void push(int n, Stack<Integer> stack) {
stack.push(n);
}
static void pop(Stack<Integer> stack) {
if (stack.size() == 0) {
System.out.println(-1);
} else {
int peekNumber = stack.peek();
System.out.println(peekNumber);
stack.pop();
}
}
static void size(Stack<Integer> stack) {
int size = stack.size();
System.out.println(size);
}
static void empty(Stack<Integer> stack) {
if (stack.empty()) {
System.out.println(1);
} else {
System.out.println(0);
}
}
static void top(Stack<Integer> stack) {
if (stack.empty()) {
System.out.println(-1);
} else {
System.out.println(stack.peek());
}
}
}
모범답안
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
import java.util.StringTokenizer;
public class Main {
public static int[] stack;
public static int size = 0;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
StringTokenizer st;
int N = Integer.parseInt(br.readLine());
stack = new int[N];
while (N-- > 0) {
st = new StringTokenizer(br.readLine(), " ");
switch (st.nextToken()) {
case "push":
push(Integer.parseInt(st.nextToken()));
break;
case "pop":
sb.append(pop()).append('\n');
break;
case "size":
sb.append(size()).append('\n');
break;
case "empty":
sb.append(empty()).append('\n');
break;
case "top":
sb.append(top()).append('\n');
break;
}
}
System.out.println(sb);
}
public static void push(int item) {
stack[size] = item;
size++;
}
public static int pop() {
if(size == 0) {
return -1;
}
else {
int res = stack[size - 1];
stack[size - 1] = 0;
size--;
return res;
}
}
public static int size() {
return size;
}
public static int empty() {
if(size == 0) {
return 1;
}
else {
return 0;
}
}
public static int top() {
if(size == 0) {
return -1;
}
else {
return stack[size - 1];
}
}
}
배운점
- stack은 실행속도가 배열보다 느리다.
굳이 스택을 사용하지 않아도 되면 리스트를 사용해도 괜찮다.
- if-else보다 switch-case의 실행속도가 더 빠르다.