백준 10828: 스택 명령 처리와 빈 스택 확인
백준 10828번 ‘스택’은 입력된 명령에 따라 값을 넣거나 꺼내고 크기와 맨 위의 값을 출력하는 문제입니다. Java의 Stack<Integer>를 사용하고 switch문으로 명령을 나눴습니다.
push만 숫자를 하나 더 읽습니다
한 줄을 읽으면 첫 토큰은 명령어입니다. push에는 넣을 숫자가 뒤따르므로 이 경우에만 nextToken()을 한 번 더 호출합니다.
pop과 top은 스택이 비어 있으면 -1을 출력합니다. 비어 있지 않을 때 pop()은 값을 꺼냅니다. peek()은 맨 위의 값을 꺼내지 않고 확인하는데 빈 스택에서 호출하면 오류가 나므로 top에도 빈 스택인지 확인하는 조건이 필요합니다.
empty는 비어 있으면 1, 그렇지 않으면 0을 출력합니다. size는 현재 들어 있는 값의 개수를 출력하면 됩니다.
당시 제출 코드
import java.io.*;
import java.util.*;
class Main {
static BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
Stack<Integer> stack = new Stack<>();
int N = Integer.parseInt(br.readLine());
String cmd;
int x = 0;
for (int i = 0; i < N; i++) {
st = new StringTokenizer(br.readLine()," ");
cmd = st.nextToken();
if (cmd.equals("push")) {
x = Integer.parseInt(st.nextToken());
}
switch (cmd) {
case "push":
stack.push(x);
break;
case "pop":
if (stack.isEmpty()) {
bw.write("-1");
bw.write("\n");
} else {
bw.write(String.valueOf(stack.pop()));
bw.write("\n");
}
break;
case "size":
bw.write(String.valueOf(stack.size()));
bw.write("\n");
break;
case "empty":
if (stack.isEmpty()) {
bw.write(String.valueOf(1));
bw.write("\n");
} else {
bw.write(String.valueOf(0));
bw.write("\n");
}
break;
case "top":
if (stack.isEmpty()) {
bw.write("-1");
bw.write("\n");
} else {
bw.write(String.valueOf(stack.peek()));
bw.write("\n");
}
break;
default:
break;
}
}
bw.flush();
}
}