λ¬Έμ
νμ΄
DP λ¬Έμ λ€. νΈλ¦¬μμ μμλ€μ λμ ν©μ΄ μ΅λκ°λλ κ°μ μΆλ ₯νλ λ¬Έμ μ΄λ€.
DP μ νμμ μλμ κ°μ΄ μκ°νλ€.
{μμμ νμ¬ κ° + (μ€λκ°μ μ or μΌλκ°μ μ) μ€ μ΅λκ°} μ ꡬν΄μ λ¨λ§λ
Έλμ λμ ν©μ λ£μ΄λλλ€
μ΄ μ νμμΌλ‘ DPμ λμ ν©μ λ£μ΄λμΌλ©΄ λ§μ§λ§ λ°°μ΄μ μ΄ λμ ν©μ κ²½μ°κ° μμ΄λ―λ‘ λ§μ§λ§ λ°°μ΄ μ€ μ΅λκ°μ μΆλ ₯νλ©΄ λ΅μ΄λ€.
class Solution {
public int solution(int[][] triangle) {
int len = triangle.length;
int[][] dp = new int[len][len];
dp[0][0] = triangle[0][0];
for (int i=1; i<len; i++){
dp[i][0] = triangle[i][0] + dp[i-1][0]; // νΈλ¦¬μμ μΌμͺ½μ 무쑰건 μΌμͺ½λΌλ¦¬μ ν©μ΄ κ°μ₯ νΌ
for (int j=1; j<i+1; j++){
dp[i][j] += triangle[i][j] + Math.max(dp[i-1][j-1], dp[i-1][j]); // dp μ νμ
}
}
// dp[len-1] λ°°μ΄(λ§μ§λ§ λ°°μ΄)μ΄ κ° λμ ν©μ λν λΆλΆμ΄λ―λ‘ μ¬κΈ°μ μ΅λκ°μ΄ μ λ΅
int ans = Arrays.stream(dp[len-1]).max().getAsInt();
return ans;
}
}
1. dp λ°°μ΄μ 루νΈλ₯Ό triangle λ°°μ΄μ 루νΈμ κ°κ² μ€μ ν΄μ€λ€.
2. νΈλ¦¬μμ μΌμͺ½ λΆλΆμ 무쑰건 μΌμͺ½λΌλ¦¬μ λμ ν©μ΄ μ΅λμ΄λ―λ‘ κ·Έ λΆλΆμ λ¨Όμ κ³μ°ν΄μ€λ€.
3. μμμ μΈμ΄ μ νμμ μ½λλ‘ μ§λ©΄ λ€μκ³Ό κ°λ€.
DP[i][j] += triangle[i][j] + Math.max(dp[i-1][j-1], dp[j-1][j])
4. λ§μ§λ§μΌλ‘ streamμ μ΄μ©ν΄μ dpμ λ§μ§λ§ λ°°μ΄μ μ΅λκ°μ λ½μμμ λ°ννλλ‘ κ΅¬ννλ€.