Algorithm/BaekJoon

[백준/Python] 1874번 - 스택 수열

빵빵0 2023. 9. 2. 01:26
import sys
input = sys.stdin.readline

n = int(input())

result = []
stack = []

i = 1
for _ in range(n):
  target = int(input())

  if not stack or stack[-1] < target:
    for num in range(i, target + 1):
      stack.append(num)
      result.append('+')
    i = target + 1
  
  if stack[-1] == target:
    stack.pop()
    result.append('-')
  else:
    break

if stack:
  print('NO')
else:
  print(*result, sep='\n')

 

문제에서 하라는 대로 따라가면서 풀면 된다.

그리고 어떤 경우에 수열이 만들어지지 않는지 생각해보자.

stack의 top 숫자가 현재 순서의 수열 숫자 보다 작을 경우는, 숫자를 스택에 더 채워넣어 원하는 숫자로 맞춰주면 되지만,

stack의 top 숫자가 현재 순서의 수열 숫자 보다 클 경우는, pop()을 하는 순간 수열이 깨지고, 숫자를 더 채워넣어도 도움이 없으므로 수열을 완성시킬 수 없다.