Hanbit the Developer

[Python] 백준 1874번: 스택 수열 본문

Algorithm/백준

[Python] 백준 1874번: 스택 수열

hanbikan 2021. 5. 6. 14:57

www.acmicpc.net/problem/1874

N = int(input())
nums = []

for _ in range(N):
    nums.append(int(input()))

stack = []
toPush = 1
toPrint = []
for num in nums:
    while toPush <= num:
        toPrint.append("+")
        stack.append(toPush)
        toPush += 1

    if stack.pop() == num:
        toPrint.append("-")
    else:
        toPrint = ["NO"]
        break

for c in toPrint:
    print(c)

nums를 따르는 for문을 도는데, 각 반복문에서 수행할 작업 단위는 num을 pop하는 것까지가 되겠다.

그러니까 nums가 '4 3 6 8 7 5 2 1'라고 하면(문제의 예시 입력1) num이 4일 때 '++++-' 3일 때 '-' 6일 때 '++-'를 수행한다는 것이다.

 

각 반복문은 크게 while문과 if문으로 나뉘어 있다.

while문에서는 toPush(어떤 숫자까지 push 하였는지 기록)를 늘려주면서 현재의 num값이 나오기 전까지 stack에 push를 해준다. 예시 입력1에서 처음에 4가 나왔는데, 여기에 대해서 1, 2, 3, 4를 순서대로 push 한다는 것이다.

다음으로 if문에선, 스택의 맨 윗부분이 정말로 num과 일치하게 되었는지를 검사하고, 일치하면 정상 작동이므로 '-' 연산을 해주고, 일치하지 않는다면 toPrint를 ["NO"]로 바꾸고 break 해준다.

 

마지막으로 배열 형태로 기록된 toPrint를 순서대로 출력해준다.