[Silver IV] 스택 - 10828
문제 링크
스택 - 10828
성능 요약
메모리: 18724 KB, 시간: 228 ms
분류
자료 구조, 구현, 스택
제출 일자
2024년 4월 29일 12:24:25
문제 설명
정수를 저장하는 스택을 구현한 다음, 입력으로 주어지는 명령을 처리하는 프로그램을 작성하시오.
명령은 총 다섯 가지이다.
push X: 정수 X를 스택에 넣는 연산이다.
pop: 스택에서 가장 위에 있는 정수를 빼고, 그 수를 출력한다. 만약 스택에 들어있는 정수가 없는 경우에는 -1을 출력한다.
size: 스택에 들어있는 정수의 개수를 출력한다.
empty: 스택이 비어있으면 1, 아니면 0을 출력한다.
top: 스택의 가장 위에 있는 정수를 출력한다. 만약 스택에 들어있는 정수가 없는 경우에는 -1을 출력한다.
입력
첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지 않은 명령이 주어지는 경우는 없다.
출력
출력해야하는 명령이 주어질 때마다, 한 줄에 하나씩 출력한다.
14
push 1
push 2
top
size
empty
pop
pop
pop
size
empty
pop
push 3
empty
top
2
2
0
2
1
-1
0
1
-1
0
3
7
pop
top
push 123
top
pop
top
pop
-1
-1
123
123
-1
-1
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.EmptyStackException;
import java.util.Stack;
import java.util.StringTokenizer;
public class Practice {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); // 입력을 받기 위한 BufferedReader 생성
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); // 출력을 위한 BufferedWriter 생성
int repeat = Integer.parseInt(br.readLine()); // 명령의 수를 읽어옴
Stack<Integer> stack = new Stack<>(); // 정수를 저장하기 위한 스택 생성
for (int i = 0; i < repeat; i++) { // 주어진 명령의 수만큼 반복
StringTokenizer st = new StringTokenizer(br.readLine()); // 입력된 문자열을 공백으로 나누는 StringTokenizer 생성
String command = st.nextToken(); // 명령을 읽어옴
switch (command) { // 명령에 따라 분기 처리
case "push":
int value = Integer.parseInt(st.nextToken()); // 다음 토큰을 정수로 변환하여 값을 읽어옴
stack.push(value);
break;
case "pop":
try {
bw.write(stack.pop() + "\n"); // 스택에서 값을 제거하고 그 값을 출력
} catch (EmptyStackException e) { // 스택이 비어 있는 경우
bw.write("-1\n"); // -1을 출력
}
break;
case "size":
bw.write(stack.size() + "\n"); // 스택의 크기를 출력
break;
case "empty":
bw.write((stack.isEmpty() ? 1 : 0) + "\n"); // 스택이 비어 있는지 여부에 따라 1 또는 0을 출력
break;
case "top":
try {
bw.write(stack.peek() + "\n"); // 스택의 맨 위 값을 출력
} catch (EmptyStackException e) {
bw.write("-1\n");
}
break;
}
}
bw.flush(); // 버퍼에 남아 있는 데이터를 출력
bw.close(); // 출력 버퍼를 닫음
br.close(); // 입력 버퍼를 닫음
}
}