https://school.programmers.co.kr/learn/courses/30/lessons/43105
dp 기본 문제이다. 다음과 같이 한 숫자를 기준으로 봤을 때 왼쪽과 합쳐질 수도 있고 오른쪽과 합쳐질 수도 있다. 그리고 더 큰 값으로 합치면 된다.
- dp[i][j] = max(dp[i - 1][j - 1], dp[i - 1][j]) + arr[i][j]
이를 코드로 구현하면 다음과 같다.
import java.util.*;
class Solution {
public int solution(int[][] triangle) {
int n = triangle.length;
int[][] dp = new int[n][n];
if (n == 1) return triangle[0][0];
dp[0][0] = triangle[0][0];
for (int i = 1; i < n; i++) {
dp[i][0] = dp[i - 1][0] + triangle[i][0];
for (int j = 1; j <= i; j++) {
dp[i][j] = Math.max(dp[i - 1][j - 1], dp[i - 1][j]) + triangle[i][j];
}
}
int answer = 0;
for (int i = 0; i < n; i++) {
answer = Math.max(answer, dp[n - 1][i]);
}
return answer;
}
}
'CS > Algorism' 카테고리의 다른 글
99클럽 코테 스터디 20일차 TIL: [프로그래머스] 사칙연산 (0) | 2024.06.08 |
---|---|
[2024 KAKAO WINTER INTERNSHIP] 도넛과 막대 그래프 (0) | 2024.06.07 |
99클럽 코테 스터디 18일차 TIL: [프로그래머스] N으로 표현 (0) | 2024.06.06 |
99클럽 코테 스터디 17일차 TIL: [프로그래머스] 단속카메라 (0) | 2024.06.05 |
[2024 KAKAO WINTER INTERNSHIP] 산 모양 타일링 (1) | 2024.06.04 |