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을 요구되는 포맷에 맞게 출력한다.
'Week 01 ~ 04 : 알고리즘 문제 풀이' 카테고리의 다른 글
파이썬 백준 6549 히스토그램에서 가장 큰 직사각형 (0) | 2021.11.13 |
---|---|
파이썬 백준 10000 원 영역 (0) | 2021.11.13 |
파이썬 백준 17608 막대기 (0) | 2021.11.13 |
파이썬 백준 9012 괄호 (0) | 2021.11.13 |
파이썬 백준 10773 제로 (0) | 2021.11.13 |