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을 요구되는 포맷에 맞게 출력한다.