백분1874(파이썬) - 스택 수열

resilient

·

2021. 5. 24. 02:11

728x90
반응형

https://www.acmicpc.net/problem/1874

 

1874번: 스택 수열

1부터 n까지에 수에 대해 차례로 [push, push, push, push, pop, pop, push, push, pop, push, push, pop, pop, pop, pop, pop] 연산을 수행하면 수열 [4, 3, 6, 8, 7, 5, 2, 1]을 얻을 수 있다.

www.acmicpc.net

  • 이 문제는 생각을 잘해야 했다. 문제는 이해했는데 어떻게 구현해야 할지 감이 오지 않았다.
  • 일단 data를 받고, for문을 돌려야겠다고 생각했으나, 어떻게 + 혹은 - 를 출력해야할지 생각하다가
  • 리스트에 담고, 그 리스트를 for문으로 출력해야겠다고 생각했다.
  • 따라서 for문에 while문을 담아서 구현해줬다.
import sys
input = sys.stdin.readline

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

stack = []
result = []
idx = 1
for i in range(n):
    if idx<=data[i]:
        while idx<=data[i]:
            stack.append(idx)
            result.append('+')
            idx += 1
        stack.pop()
        result.append('-')
    else:
        if len(stack)!=0 and stack[-1] == data[i]:
            stack.pop()
            result.append('-')
if len(stack)!=0:
    print("NO")
else:
    for i in result:
        print(i)

    
반응형