다음과 같은 순서로 접근했다.
[1] 입력된 수열을 차례대로 확인한다.
[2] 현재 스택에 push할 숫자(current)가 가져온 값(num)과 같아질 때까지 스택에 push 연산(+)을 수행한다.
[3-1] 스택의 top 값이 가져온 값(num)과 같다면, pop 연산(-)을 수행하여 스택에서 제거한다.
[3-2] 스택이 비어 있거나, 스택의 top 값이 가져온 값(num)과 다르다면, 해당 수열을 만들 수 없다. 그러므로 "NO"를 출력하고 종료한다.
[4] 위 과정을 반복하고, break 없이 정상적으로 반복문이 종료되었다면, answer에 저장된 연산 결과를 출력한다.
import sys
n = int(sys.stdin.readline().strip())
arr = [int(sys.stdin.readline().strip()) for _ in range(n)]
stack = [] # 입력된 수열을 만들기 위한 스택
answer = [] # 필요 연산
current = 1 # 오름차순으로 입력할 숫자
for num in arr:
while current <= num:
stack.append(current)
answer.append("+")
current += 1
if stack and stack[-1] == num:
stack.pop()
answer.append("-")
else:
print("NO")
break
else:
print("\n".join(answer))