스택의 원리를 정확하게 알고 있는지를 묻는 문제이다. 이 문제는 스택의 pop, push연산과 후입선출 개념을 이해하고 있다면 쉽게 풀 수 있다. 스택에 넣는 값은 오름차순 정렬이어야 한다는 것에 유념하며 문제를 풀면 된다.
문제를 푸는 과정의 아이디어는 다음과 같다
스택의 peek값과 입력으로 주어진 수열의 값들을 비교해보는 과정을 진행해본다
# 스택으로 수열 만들기
import sys
input = sys.stdin.readline
N = int(input())
goal = [None]*N
Result = ""
lastNum = 1 # 어디까지 스택에 추가해주었는지 기억하기 위한 변수
check = True
stk = []
for i in range(N):
goal[i] = int(input())
for i in range(N): # 스택의 peek 값과 주여진 수열의 값들을 비교해가는 과정
if len(stk) == 0:
while lastNum <= goal[i]:
stk.append(lastNum)
lastNum += 1
Result += "+"
if stk[-1] == goal[i]:
stk.pop()
Result += '-'
elif stk[-1] < goal[i]:
while lastNum <= goal[i]:
stk.append(lastNum)
lastNum += 1
Result += "+"
stk.pop()
Result += '-'
else:
print("NO")
check = False
break
if check:
for i in range(len(Result)):
print(Result[i])