문제
https://www.acmicpc.net/problem/33848
Algorithm
해당 스택의 3번 쿼리, : 최근 개의 번 또는 번 쿼리를 취소한다. 취소할 수 있는 1번 또는 번 쿼리가 개 이상인 경우에만 주어진다. 를 수행하기 위해 이전 쿼리의 작동을 기억해야 할 필요가 있다.
그렇기에 메인 스택, 임시 스택을 두어 메인 스택에는 위의 쿼리를 진행한다. 임시 스택에는 1번 쿼리 수행시 0을 집어넣고, 2번 쿼리 수행시 메인 스택에서 제거된 수를 집어 넣는다.이후에 3번 쿼리가 들어오면 j번 만큼 임시 스택에서 pop연산을 진행하여 값이 0이면 메인 스택에서 제거, 값이 0이 아니면 해당 수를 메인 스택에 집어넣는 연산을 해주면 된다.
Code
import sys
input = sys.stdin.readline
INF = int(1e9)
main_stack = []
tmp_stack = []
for _ in range(int(input())):
arr = list(map(int,input().split()))
if arr[0] == 1:
main_stack.append(arr[1])
tmp_stack.append(0)
elif arr[0] == 2:
tmp_val = main_stack.pop()
tmp_stack.append(tmp_val)
elif arr[0] == 3:
for i in range(arr[1]):
tmp_val = tmp_stack.pop()
if (tmp_val == 0):
main_stack.pop()
else:
main_stack.append(tmp_val)
elif arr[0] == 4:
print(len(main_stack))
elif arr[0] == 5:
if(len(main_stack) == 0):
print(-1)
else:
tmp_val = main_stack.pop()
print(tmp_val)
main_stack.append(tmp_val)
'Koala - 18기 > 코딩테스트 심화 스터디' 카테고리의 다른 글
백준 10799 쇠막대기 (0) | 2025.07.06 |
---|---|
[백준/JAVA] 1700번: 콘센트 스케줄링 (0) | 2025.05.25 |
[백준/C++] 1294번: 문자열 장식 (0) | 2025.05.22 |
[백준/C++] 13911번: 집 구하기 (0) | 2025.05.22 |
[백준/C++] 1422번: 숫자의 신 (0) | 2025.05.22 |