문제: https://programmers.co.kr/learn/courses/30/lessons/42588

풀이

스택으로 풀이했다.
스택의 가장 위 원소가 heights 반복문에서 현재 높이보다 작거나 같으면 pop을 한다.
크다면 신호를 수신하는 탑일 것이므로 answer[i] 값을 스택 가장 위 원소의 인덱스로 바꾼다.
마지막으로는 매번 현재의 height와 인덱스를 stack에 append 해준다.

소스코드

def solution(heights):
    stack = []
    answer = [0 for _ in range(len(heights))]
    
    for i, height in enumerate(heights):
        while stack and height >= stack[-1][0]:
            stack.pop()
        
        if stack:
            answer[i] = stack[-1][1]

        stack.append((height, i + 1))
        
    return answer