알고리즘

[Python | 프로그래머스 | Lv_2] 땅따먹기

deedee2 2024. 7. 17. 21:08
728x90

😉 아이디어

1. 동적 프로그래밍 처리 문제

2. 현 Row의 인덱스를 기준으로 이전 Row와 합산이 가능한 경우의 수 중 최대 산출

3. 현재 Row의 값에 반영하고 다음 행 진행

😉 풀이

def getValue(prevRow, currentValue, blockedIndex):
    # 이전에 사용한 인덱스 외 모든 경우의 수 비교
    maxValue = -1
    #print('prevRow', prevRow)
    for i in range(len(prevRow)):
        if i == blockedIndex:
            continue
        prevValue = prevRow[i]
        maxValue = max(maxValue, prevValue + currentValue)
    return maxValue

def solution(land):
    answer = 0
    for i in range(1, len(land)):
        currentRow = land[i]
        # print('currentRow', currentRow)
        for j in range(len(currentRow)):
            # 계산된 최대값으로 현재값 교체
            land[i][j] = getValue(land[i - 1], currentRow[j], j)
    #print('land', land)
    return max(land[len(land) - 1])

✔️ 링크 : https://school.programmers.co.kr/learn/courses/30/lessons/12913