[알고리즘] 프로그래머스 - 땅따먹기

June·2021년 3월 5일
0

알고리즘

목록 보기
118/260
post-custom-banner

프로그래머스 - 땅따먹기

내 풀이

def solution(land):
    dp = [[0] * len(land[0]) for _ in range(len(land))]
    dp[0] = copy.deepcopy(land[0])
    for i in range(1, len(land)):
        for j in range(len(land[0])):
            if j == 0:
                dp[i][j] = max(dp[i-1][1:]) + land[i][j]
            elif j == len(land[0]) - 1:
                dp[i][j] = max(dp[i-1][:j]) + land[i][j]
            else:
                dp[i][j] = max(max(dp[i-1][:j]), max(dp[i-1][j+1:])) + land[i][j]

    return max(max(dp))

그리 어렵지 않은 문제다. 직전 위에 행에서 같은 열이 아닌 값중 가장 큰 값을 더해주면 된다.

코드를 쓰다 알게된 것인데 2차원 배열일때는 max(max(arr))를 써주면 2차원 배열에서 가장 큰 값이 나온다.

다른 사람 풀이

def solution(land):

    for i in range(1, len(land)):
        for j in range(len(land[0])):
            land[i][j] = max(land[i -1][: j] + land[i - 1][j + 1:]) + land[i][j]

    return max(land[-1])

슬라이싱을 이용할 경우, 슬라이싱 결과가 없을 경우도 있어서 max를 바로 쓰기 곤란했는데, 이 풀이에서는 j가 0이든 마지막꺼이든 그것을 제외한 것들을 더해서 리스트를 만들어줌으로서 max를 바로 쓸 수 있다.

post-custom-banner

0개의 댓글