문제는 그냥 스택으로 풀어주면된다. 스택을 구성하여 값을 넣었다가 뺐다가 이리저리 하는 문제이다.
문제는 4가 나오면
[1,2,3,4] 까지 받고 4를 반환 => [1,2,3]
3이 나오면
[1,2,3] 에서 3을 반환 => [1,2]
요런 식으로 동작한다. 좋은 점은 오름차순으로 push되기 때문에 값을 계속 해서 증가시키며 push를 하면 된다.
조심해야할점은 각 값을 받으면서 "+"나 "-"를 op리스트에 쌓아준다.
그러다가 문제가 있으면 "NO"를 반환하게 하고, 끝까지 잘 동작하면 "+","-"를 차례로 반환해주면된다.
import sys
n = int(input())
stack = []
op = []
count =1
for _ in range(n):
num = int(sys.stdin.readline())
while count <= num:
stack.append(count)
op.append("+")
count += 1
if stack[-1] == num:
op.append("-")
stack.pop()
else:
print("NO")
break
if len(stack) == 0:
for i in op:
print(i)
'알고리즘' 카테고리의 다른 글
백준 18258 파이썬 풀이 (큐 2, deque) (0) | 2021.03.09 |
---|---|
백준 17298 풀이 (오큰수, 스택) (0) | 2021.03.08 |
백준 4949 풀이 (균형잡힌 세상, 스택) (0) | 2021.03.04 |
백준 10773 풀이 (sys.stdin.readline()) (0) | 2021.03.04 |
백준 10828 풀이 (스택, sys.stdin.readline, 입력속도 높이기) (0) | 2021.03.04 |