[test] 탑 - python

joygoround·2020년 5월 19일
0

Coding Test

목록 보기
41/42

Q.

My A.

def solution(heights):
    answer = []
    for i in range(len(heights)):
        new = heights[0:i]
        re_new = new[::-1]

        if i == 0:
            got = 0

        elif max(new) <= heights[i] :
            got = 0

        else:
            for x in re_new:
                if x > heights[i]:
                    break
            got = len(new) - re_new.index(x) 

        answer.append(got)

    return answer
    

heights의 길이 만큼 반복하는 i에 대해,
인덱스 0 ~ i-1 까지 담긴 새 리스트 new와 그걸 뒤집은 re_new를 만든다.

인덱스 i 가 0이거나 그 값이 new의 최대값보다 크거나 같으면 o을 저장하고,
그게 아니면 re_new에서 값보다 큰 값인 x를 찾고, new에서 x의 인덱스값(뒤에서부터) 를 구해서 got에 저장한다.

차례로 got을 append해준다

other A.

def solution(heights):
    answer = [0]*len(heights)
    stack = [] 

    for i in reversed(range(len(heights))):
        while stack and stack[-1][1] < heights[i]:
            idx, height = stack.pop()
            answer[idx] = i+1
        stack.append((i, heights[i]))

    return answer
profile
roundy

0개의 댓글