본문 바로가기
정리/알고리즘

DP - 정수 삼각형

by Hudini30 2022. 3. 7.

프로그래머스 (DP) - 정수 삼각형

해당 문제는 이전 층의 좌,우 dp의 합 중 큰 값과 더하는 문제였습니다. dp(x, y) = triangle(x,y) + MAX(dp(x-1, y좌), dp(x-1, y우)) 라는 것으로 마지막층까지 총 합을 저장한 dbTriangle 이중배열을 만든후 마지막 층의 dp 합 중 가장 큰 값을 return해주었습니다.

    public int solution(int[][] triangle) {
        int height = triangle.length;
        int[][] dpTriangle = new int[height][];
        dpTriangle[0] = new int[]{triangle[0][0]};

        for (int i = 1; i < triangle.length; i++) {
            dpTriangle[i] = new int[triangle[i].length];
            for(int j = 0; j < triangle[i].length; j++) {
                int preN = i - 1;
                int leftX = Math.max(j - 1, 0);
                int rightX = Math.min(j, dpTriangle[preN].length - 1);
                dpTriangle[i][j] = Math.max(dpTriangle[preN][leftX], dpTriangle[preN][rightX]) + triangle[i][j];
            }
        }

        return Arrays.stream(dpTriangle[height - 1]).max().orElse(0);
    }

'정리 > 알고리즘' 카테고리의 다른 글

DP - 도둑질  (0) 2022.03.09
DP - 등굣길  (0) 2022.03.08
DP - N으로 표현  (0) 2022.03.04
탐욕법 - 단속카메라  (0) 2022.03.03
탐욕법 - 섬 연결하기  (0) 2022.03.02

댓글