본문 바로가기

CodingTest/Baekjun Online Judge

[ BOJ / 파이썬 ] 1874 스택 수열

/  제출 1  /

import sys
input = sys.stdin.readline


n = int(input())
targets = []
for i in range(n):
  k = int(input())
  targets.append(k)

stack = []
t = 0
result = []
for i in range(1, n+1):
  stack.append(i)
  result.append('+')
  if targets[t] == i:
    j = len(stack) - 1
    while targets[t] == stack[j]:
      stack.pop()
      result.append('-')
      t += 1
      j = len(stack) - 1
      if j < 0:
        break
      
if stack:
  print('NO')
else:
  for res in result:
    print(res)

 

: 처음에 1~n의 숫자가 뭐 어떻게 된다는건지 지문 이해가 조금 오래 걸렸습니다.

: 그리고는 스택 기준으로 확인해야할 지 조금 고민하고, 값을 스택에 넣으면서 조건을 따져야겠다고 판단이 되었습니다.

 

: 더하는 것도 기록되어야하기 때문에 일단 값이 들어오면 무조건 스택에 넣고 만약 넣은 값이 우리가 현재 타겟하는 값과 동일하다면 조건 부합까지 쭉 스택에서 제거하는 식으로 구성했습니다.