코딩테스트 대비/BOJ
[Baekjoon/Python] 1874번: 스택 수열 - 효과는 굉장했다!
bluetag_boy
2021. 11. 2. 04:18
반응형
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
알고리즘 분류
- 자료 구조
- 스택
SOLUTION
import sys
n = int(sys.stdin.readline())
cnt = 1
num_list = []
answer = []
tmp = True
for _ in range(n):
num = int(sys.stdin.readline())
while cnt <= num: # 1부터 num 까지 생성
num_list.append(cnt)
answer.append("+")
cnt += 1
if num_list[-1] == num: # num으로 들어온 수 까지 pop() 하고 - 출력
num_list.pop()
answer.append("-")
else: # 오름차순 순인데 num_list[-1] 보다 이전 인덱스가 나오면 앞에 인덱스가 pop되므로 스택 순열 성립X
tmp = False # ex) num_list = [3,4,5] / num = 3 일때 num_list 안에 있는 3에 도달하려면 4, 5가 pop되어야 하므로 오류
if tmp == False:
print("NO")
else:
print(*answer, sep="\n")