[프로그래머스] 정수 삼각형 - Map

zunzero·2022년 8월 23일
0

알고리즘(파이썬)

목록 보기
31/54

https://school.programmers.co.kr/learn/courses/30/lessons/43105
문제는 다이나믹 프로그래밍 문제이다.
다이나믹 프로그래밍 문제는 개인적으로 가장 어려워 하는 유형인데 그래도 어렵지 않게 점화식을 구할 수 있었던 비교적 가벼운 문제였다.

이 문제를 포스팅하는 이유는 2차원 배열에서의 최대값을 찾는 로직을 작성하기 위함이다.

def solution(triangle):
    # dp 테이블 초기화 -> dp 테이블 초기화에 너무 쓸데없는 코드들을 낭비했다.
    dp = []
    length = []
    for i in range(len(triangle)):
        length.append(len(triangle[i])) 
    for i in length:
        line = []
        for j in range(i):
            line.append(0)
        dp.append(line)
        
    dp[0][0] = triangle[0][0]
    for i in range(1, len(triangle)):
        for j in range(len(triangle[i])):
            # 맨 왼쪽
            if j == 0:
                dp[i][j] = dp[i-1][0] + triangle[i][j]
            # 맨 오른쪽                
            elif j == len(triangle[i]) - 1:
                dp[i][j] = dp[i-1][j-1] + triangle[i][j]
            else:
                # 점화식
                dp[i][j] = max(dp[i-1][j-1] + triangle[i][j], dp[i-1][j] + triangle[i][j])
    # 2차원 배열 최대값 찾기 -> map 함수 유용!        
    max_value = max(map(max, dp))
    return max_value

dp 테이블 초기화에 있어 깔끔한 풀이는 아니지만, 핵심은 마지막 줄에서 2차원 배열의 최대값을 찾는 것이다.

이 때 map 함수를 사용했다.

map(function, iterable)

iterable한 자료형의 값들에 하나하나 function을 먹여주는 것이다.
map 객체를 반환하기 때문에 후에 list나 tuple로 바꿔주는 작업을 진행해주는 것이 좋다.

max(map(max, dp))

dp 라는 2차원 배열에, 각 원소는 1차원 배열이다.
즉 각 1차원 배열에 max 함수를 맥여 각 배열의 최대값으로 이루어진 map 객체를 만든다.
그 후 다시 max 함수를 맥이면 최종 최대값을 구할 수 있는 것이다.

profile
나만 읽을 수 있는 블로그

0개의 댓글