📖문제
https://www.acmicpc.net/problem/1874
import sys
def solution(n, l):
index = 1 # 현재 스택에 푸시해야 할 숫자를 추적하는 변수
stack = [] # 실제 숫자를 푸시하고 팝하는 스택
answer = [] # '+' 또는 '-' 연산을 저장하는 리스트
for num in l:
# num에 도달할 때까지 숫자를 스택에 푸시
while index <= num:
stack.append(index)
answer.append('+') # 푸시 연산을 기록
index += 1 # 다음 푸시해야 할 숫자로 업데이트
# 스택의 top이 현재 수열의 숫자와 같다면 팝 연산 수행
if stack[-1] == num:
stack.pop()
answer.append('-') # 팝 연산을 기록
# 스택의 top에 있는 숫자가 현재 수열의 숫자보다 크면
# 수열을 만들 수 없으므로 'NO'를 출력하고 함수를 종료
if stack and stack[-1] > num:
print('NO')
return
# 가능한 연산 과정 출력
print('\n'.join(answer))
# 표준 입력으로부터 데이터를 받음
n = int(sys.stdin.readline().rstrip())
l = []
for _ in range(n):
l.append(int(sys.stdin.readline().rstrip()))
# 솔루션 함수 호출
solution(n, l)