Week 01 ~ 04 : 알고리즘 문제 풀이
파이썬 백준 2493 탑
정글러
2021. 11. 13. 20:02
n = int(input())
l = list(map(int, input().split()))
stack = [[0, l[0]]]
table = [0]
for i in range(1, n) :
h = l[i]
while stack[-1][1] < h :
del stack[-1]
if stack == [] :
table.append(0)
break
if stack != [] :
table.append(stack[-1][0] + 1)
stack.append([i, h])
for i in range(len(table) - 1) :
print(table[i], end = ' ')
print(table[-1])
|
0번째 탑의 컨디션을 수동으로 stack과 table에 넣어준다.
i번째 기둥보다 낮은 원소들이 stack에서 삭제된다. 즉 stack에는 항상 현재 레이저 수신이 가능한 탑들만 남는다.
stack관리 후 i번째보다 높은 최초의 탑 stack[-1]에 레이저가 수신되므로 그것을 table에 기록한다.
table을 요구되는 포맷에 맞게 출력한다.