즐거운 PS 👩‍💻🥰

[백준-파이썬] 1874: 스택 수열

dalin❤️ 2021. 12. 31. 13:07

문제 보러 가기!

문제

1n의 수로 이뤄진 수열이 주어진다. 1n까지 수를 순서대로 스택에 넣었다 뺐다 하면서 주어진 수열을 만드는 방법을 출력해야 한다.

풀이

처음에는 막막했는데, 스택의 성질을 생각하면서 구현했더니 됐다 !
스택 - Last in First out!!

import sys

input = sys.stdin.readline
MIIS = lambda: map(int, input().split())

n = int(input())
arr = list(int(input()) for _ in range(n))  # 입력된 수얼

ans = []

stack = []
idx = 0  # 입력된 수열 어디까지 만들었는지
for i in range(1, n+1):
    stack.append(i)  # 스택에 넣는다
    ans.append('+')

    while stack:
        if stack[-1] == arr[idx]:
            stack.pop()  # 스택에서 뺀다
            ans.append('-')
            idx += 1 # 입력된 수열 일부를 만들었으니 idx 하나 증가
        else:
            break

# 답이 있으면
if idx == n:
    for a in ans:
        print(a)

else: # 답 없으면
    print('NO')
728x90