문제


풀이 1

문제를 처음 봤을 때 생각나는 대로 푼 방법이다.

def solution(heights):
    n = len(heights)
    answer = [0]
    for idx in range(1,n):
        h = heights[idx]
        idx2 = idx-1
        while True:
            h2 = heights[idx2]
            if h2 > h:
                answer.append(idx2+1)
                break
            else:
                if idx2 == 0:
                    answer.append(0)
                    break
                else:
                    idx2 -= 1
    return answer


풀이 2

프로그래머스의 스택/큐 분류에 속해있는 문제인 만큼 스택을 활용하여 푸는 것이 출제자의 의도에 맞게 푸는 방법일 것이다.

def solution(heights):
    answer = []
    st = []

    while heights:
        top = heights.pop()
        while heights and heights[-1] <= top:
            st.append(heights.pop())
        answer.append(len(heights))
        while st:
            heights.append(st.pop())

    answer = answer[::-1]
    return answer


Reference

https://www.digitalculture.or.kr/koi/selectOlymPiadDissentList.do

https://gurumee92.tistory.com/166