[BaekJoon 1874 : Data Structure, Python] - 스택 수열
2021, Oct 18
백준 1874 스택 수열 : 실버 2
Solution
import sys
n = int(input())
data = list(map(lambda x: int(x.rstrip()), sys.stdin.readlines()))
def makeSeq(n):
myStack = []
result = []
num = 1
for i in range(n):
cur = data[i]
while len(myStack) == 0 or myStack[-1] < cur:
myStack.append(num)
result.append("+")
num += 1
if myStack[-1] > cur:
return "NO"
elif myStack[-1] == cur:
myStack.pop()
result.append("-")
return '\n'.join(result)
print (makeSeq(n))
풀이과정 및 느낀점
주어진 수열을 스택 자료구조를 통해 구현하기 위해 어떤 순서로 계산해야 하는지 +(push), -(pop) 형태로 출력해야 하는 문제이다. 스택에 들어가는 순서가 반드시 오름차순이고, 스택의 LIFO 특성 역시 고려해야 하기 때문에 push, pop 조건을 코드로 구현하는 과정이 까다로웠다.
- 우선, stack 의 마지막 숫자가 현재 목표하는 숫자보다 큰 경우, 주어진 조건을 만족하며 수열을 구현할 수 없기 때문에 “No” 를 return 한다.
- stack 이 비어있거나, top 숫자가 cur 보다 작은 경우, 같아질 때까지 num 을 하나씩 올려가며 추가해주고, push 기호인 “+” 를 result 리스트에 append 시켜준다.
- 같은 경우에는 그 숫자가 수열에 포함될 수 있도록 pop 시켜주고 “-“ 기호를 result 에 append 한다.