문제
정수를 저장하는 스택에 대해 5가지 명령(push, pop, size, isEmpty, peek)을 처리하라.
입력
첫째 줄에 명령의 수 N, 이후 N줄에 명령이 주어진다.
출력
각 명령에 대해 해당하는 결과를 출력한다. 비어 있을 때 pop/peek은 -1을 출력한다.
예제
| 입력 | 출력 |
|---|---|
9 1 1 1 2 1 3 1 4 1 5 5 2 4 3 | 5 5 0 4 |
풀이
Java의 Stack을 사용하여 5가지 명령을 분기 처리한다.
- 명령 번호를 파싱하여 1이면 push, 2이면 pop, 3이면 size, 4이면 isEmpty, 5이면 peek을 수행한다
- pop과 peek은 스택이 비어 있으면 -1을 출력한다
StringBuilder로 출력을 모아 한 번에 출력한다
핵심 아이디어: 단순한 스택 연산 구현 문제로, 출력을 StringBuilder로 모아 I/O 효율을 높인다.
코드
package day699;
import java.io.*;
import java.util.*;
public class Day683BOJ28278스택2 {
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int time = Integer.parseInt(br.readLine());
Stack<Integer> stack = new Stack<>();
StringBuilder sb = new StringBuilder();
for (int i = 0; i < time; i++) {
String order = br.readLine();
StringTokenizer st = new StringTokenizer(order);
int A = Integer.parseInt(st.nextToken());
if (A == 1) {
int X = Integer.parseInt(st.nextToken());
stack.push(X);
}
if (A == 2) {
if (stack.isEmpty()) {
sb.append(-1).append("\n");
continue;
}
sb.append(stack.pop()).append("\n");
}
if (A == 3) {
sb.append(stack.size()).append("\n");
}
if (A == 4) {
if (stack.isEmpty()) {
sb.append(1).append("\n");
continue;
}
sb.append(0).append("\n");
}
if (A == 5) {
if (stack.isEmpty()) {
sb.append(-1).append("\n");
continue;
}
sb.append(stack.peek()).append("\n");
}
}
System.out.println(sb);
}
}복잡도
- 시간: O(N)
- 공간: O(N)