n = int(input())
arr = [0 for _ in range(n)]
for i in range(n):
arr[i] = int(input())
stack = []
k = 1
p = []
flag = 0
for ele in arr:
if not stack or stack[-1] < ele: # not stack은 스택이 비어있다는 말, stack[-1] == pop.stack 즉 스택의 마지막에 삽입한 원소
for i in range(k, ele+1):
stack.append(i)
p.append('+')
k = ele + 1 #스택에 넣었던 수는 중복되면 안되므로 기억해줄 k를 설정한다.
stack.pop()
p.append('-')
else:
if ele == stack[-1]:
stack.pop()
p.append('-')
else:
flag += 1
if flag == 0:
for i in p:
print(i)
else :
print("NO")
입력값을 arr에 넣고 arr의 ele와 스택의 원소를 비교한다.
1) 스택의 원소가 없거나 스택의 가장 위의 원소가 ele보다 작으면 ele만큼 수를 넣어준다. 이후 pop
2) ele와 스택의 원소가 같다면 pop.
+와 - 를 넣어줄 p배열을 만들고 연산의 가능여부를 판별해주기 위해 flag를 사용한다.
3) 스택에 원소도 존재하는데 ele보다 스택의 마지막 원소가 더 크다면 pop할 수도, ele만큼 append할 수도 없으니 연산이 되지 않는 경우이므로 flag를 증가시켜준다.
flag가 처음과 같이 0이라면 연산들이 저장되어있는 p배열의 원소를 출력해주고 flag가 변했다면 NO를 출력한다.