
해당 문제는 친절하게 어떤거 쓰고 어떻게 쓰이는 지 알려주고 있다
우선 코드에서 사용한 스택 함수를 보여드리겠습니다
| 스택 함수 | 설명 |
|---|---|
| push() | 스택의 맨 위 요소 추가 |
| pop() | 스택에서 맨 위에 있는 정수 반환 후 제거 |
| size() | 스택의 크기 반환 |
| isEmpty() | 스택에 원소가 없으면 'True', 있으면 'False' |
| peek() | 스택의 맨 위 요소를 삭제하지 않고 반환 |
💡
isEmpty()는 boolean 값을 반환하므로 코드에선 1과 0으로 변경해줘야 함
정수를 저장하는 스택을 구현 후 명령을 처리하는 프로그램 만들어보자
명령1. push X → X를 스택에 넣기
명령2. pop → 스택에서 가장 위에 있는 정수를 빼고, 그 수 출력 만약 스택에 정수가 없으면 -1 출력
명령3. size → 스택에 들어있는 정수의 개수 출력
명령4. empty → 스택이 비어있으면 1, 아니면 0 출력
명령5. top → 스택에 가장 위에 있는 정수 출력, 만약 스택에 정수가 없으면 -1
(1 <= N <= 10,000)(1 <= 명령 <= 100,000)단, 문제에 나와있지 않은 명령이 주어지는 경우는 없음
명령 한 줄당 결과도 하나씩 출력
💡for문이 한 번 돌때마다 스택 연산이 한 번씩 일어나기 때문에 총 시간 복잡도는 O(N)
import java.io.*;
import java.util.*;
public class No_10828 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
Stack<Integer> stack = new Stack<>();
StringBuilder sb = new StringBuilder();
for(int i = 0; i < N; i++) {
StringTokenizer st = new StringTokenizer(br.readLine());
String s = st.nextToken();
switch(s) {
case "push" :
stack.push(Integer.parseInt(st.nextToken()));
break;
case "pop" :
if(stack.isEmpty()) {
sb.append("-1\n");
} else {
sb.append(stack.pop()).append("\n");
}
break;
case "size" :
sb.append(stack.size()).append("\n");
break;
case "empty" :
if(stack.isEmpty()) {
sb.append("1\n");
} else {
sb.append("0\n");
}
break;
case "top" :
if(stack.isEmpty()) {
sb.append("-1\n");
} else {
sb.append(stack.peek()).append("\n");
}
break;
}
}
System.out.println(sb);
}
}