1. 문제분석 및 접근법
- 스택에 1부터 n까지 오름차순으로 하나씩 들어감
- n개의 숫자를 넣을 리스트 생성
- 리스트의 첫번째 숫자랑 동일해질 때까지 1부터 스택에 넣음
- 넣을때마다 + 출력
- 동일해지면 pop,
- pop할 때는 - 출력
- 그리고 다시 쌓기
- 반복하다가 pop을 하고 나서 바로 밑에 있는 데이터가 내가 필요한 수보다 크면 NO
2. 슈도코드
대실패
n 정수값 받기
lst = 0*n 리스트 생성
for i -> n까지:
lst[i] 정수값 입력받기
빈 stack 리스트 생성
num = 1 생성(비교할 숫자, for문에서 증가될 숫자)
for i -> n까지:
stack에 num 추가
+출력
if lst[i]가 num이랑 같으면:
stack 팝하고
-출력
num 1증가
재시도
n 정수값 받기
lst = 0*n 리스트 생성
for i -> n까지:
lst[i] 정수값 입력받기
빈 stack 리스트 생성
num = 1 생성(비교할 숫자, for문에서 증가될 숫자)
for i -> n까지:
if lst[i]가 num보다 크거나 같으면:
while lst[i]가 num보다 같아질때까지:
stack에 num추가
num += 1
'+'출력
pop하고
'-'출력
else:
pop하면서 결과 저장
if pop한게 lst[i]보다 크면:
NO출력
else:
-출력
3. 코드 구현
import sys
input = sys.stdin.readline
n = int(input())
lst = [0]*n
for i in range(n):
# lst[i] = int(input())
stack = []
num = 1
answer = ''
result = True
for i in range(n):
if lst[i] >= num:
while lst[i] >= num:
stack.append(num)
num += 1
answer += '+\n'
stack.pop()
answer += '-\n'
else:
x = stack.pop()
if x > lst[i]:
print('NO')
result = False
break
else:
answer += '-\n'
if result: print(answer)