- 문제 설명
위와 같은 삼각형의 꼭대기에서 바닥까지 이어지는 경로 중, 거쳐간 숫자의 합이 가장 큰 경우를 찾아보려고 합니다. 아래 칸으로 이동할 때는 대각선 방향으로 한 칸 오른쪽 또는 왼쪽으로만 이동 가능합니다. 예를 들어 3에서는 그 아래칸의 8 또는 1로만 이동이 가능합니다.
삼각형의 정보가 담긴 배열 triangle이 매개변수로 주어질 때, 거쳐간 숫자의 최댓값을 return 하도록 solution 함수를 완성하세요.
- 제한사항
- 삼각형의 높이는 1 이상 500 이하입니다.
- 삼각형을 이루고 있는 숫자는 0 이상 9,999 이하의 정수입니다.
- 입출력 예
triangle | result |
[[7], [3, 8], [8, 1, 0], [2, 7, 4, 4], [4, 5, 2, 6, 5]] | 30 |
- 문제 풀이
동적 계획법(Dynamic Programming, DP)**은 최적화 문제를 해결하는 데 사용되는 알고리즘 기법으로, 문제를 더 작은 하위 문제로 나누어 해결하고 그 하위 문제들의 답을 저장하여 중복 계산을 피하는 방법입니다.
처음엔 dpf인줄 알고 삽질하고 있다가 풀 수 있게 되었습니다.
가장 아래에서 바로 위쪽줄부터 시작하고
왼쪽숫자와 바로 아래, 오른쪽 숫자중에 큰값을 더하여 임의의 dp배열에 넣어 합을 구하는 방식입니다.
class Solution {
public int solution(int[][] triangle) {
int n = triangle.length;
int[][] dp = new int[n][n];
for (int i = 0; i < n; i++) {
dp[n-1][i] = triangle[n-1][i];
}
// 맨 아래에서 바로 위쪽 줄
for (int i = n - 2; i >= 0; i--) {
// 가장 왼쪽부터 오른쪽으로 시작
for (int j = 0; j <= i; j++) {
// 바로 아래, 오른쪽 중에 큰 값 더해서 dp에 업로드
dp[i][j] = triangle[i][j] + Math.max(dp[i + 1][j], dp[i + 1][j + 1]);
}
}
return dp[0][0];
}
}
'코딩 알고리즘 스터디' 카테고리의 다른 글
코딩마스터스 (고급) 작곡 프로그램 (1) | 2024.12.03 |
---|---|
코딩마스터스 (중급) 곰팡이 (0) | 2024.11.19 |
프로그래머스 Lv.2 롤케이크 자르기 (0) | 2024.11.11 |
프로그래머스 Lv.3 보석 쇼핑 (2) | 2024.10.28 |
프로그래머스 Lv2. 이모티콘 할인행사 (2) | 2024.10.21 |