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

AMUD·2022년 9월 16일
0

Algorithm

목록 보기
41/78

문제


문제링크

접근

  • dp문제의 대표적인 문제이다.
  • 각 층마다 내려오면서 양쪽 위 중 큰 값을 가져와서 더해나가는 방식이다.
  • 인덱스 범위 체크 및 좌우 인덱스 설정만 하면 구현에는 큰 챌린지가 없었다.

소스 코드

class Main {
    public static void main(String[] args) throws Exception {
        int[][] triangle = { { 7 }, { 3, 8 }, { 8, 1, 0 }, { 2, 7, 4, 4 }, { 4, 5, 2, 6, 5 } };

        Solution sol = new Solution();
        System.out.println("result : " + sol.solution(triangle));
    }
}

class Solution {
    public int solution(int[][] triangle) {
        int h = triangle.length;
        int w = triangle[h - 1].length;

        int[][] dp = new int[h][w];

        dp[0][0] = triangle[0][0];
        for (int i = 1; i < h; i++) {
            for (int j = 0; j < triangle[i].length; j++) {

                int left = j - 1 >= 0 ? dp[i - 1][j - 1] : -1;
                int right = j < triangle[i].length ? dp[i - 1][j] : -1;

                dp[i][j] = Math.max(left, right) + triangle[i][j];
            }
        }
        int max = -1;
        for (int i = 0; i < w; i++) {
            max = Math.max(dp[h - 1][i], max);
        }

        return max;
    }
}
profile
210's Velog :: Ambition Makes Us Diligent

0개의 댓글