풀이
현재 스택이 비어있거나 스택의 맨 위 보다 더 큰 수를 출력해야 할 때, 해당 수를 출력하기 위한 유일한 방법은 해당 수가 스택에 넣어질 때까지 계속 수를 넣는 것입니다.
따라서 스택에 계속 넣어도 해당 수를 뽑아낼 수 없다면 주어진 수열은 스택 수열이 아닙니다.
현재 스택의 맨 위와 같은 수를 출력할 수 있는 유일한 방법은 현재 스택의 맨 위를 뽑아내는 것입니다. 이 경우는 항상 가능합니다.
현재 스택의 맨 위 보다 더 작은 수를 출력할 수 있는 방법은 없습니다. 이 경우도 스택 수열이 아닙니다.
조금 일반화해 봅시다.
스택이 비어있거나 스택의 맨 위가 출력해야 할 수와 다르다면 수를 계속 넣습니다. 만약 수를 더 넣어야 하는데 이미
코드
from collections import deque
def main():
n = int(input())
stack = deque()
i = 1
history = []
for _ in range(n):
target = int(input())
while i <= n and (len(stack) == 0 or target != stack[-1]):
history.append("+")
stack.append(i)
i += 1
if len(stack) == 0 or stack[-1] != target:
print("NO")
return
history.append("-")
stack.pop()
print(*history, sep="\n")
main()