- νλ ¬μ΄ μ£Όμ΄μ‘μ λ κ°μ₯ μμͺ½ νμΌλ‘ λΆν° κ°μ₯ μλ νκΉμ§ νμνλ€. μ΄ λ νμν κ²½λ‘μ μ«μ ν© μ€ κ°μ₯ μμ μ«μλ₯Ό ꡬνλ λ¬Έμ .
- νμμ νμ¬ μμΉλ‘ λΆν° λ°λ‘ μλ, λκ°μ μΌλ‘ μΌμͺ½/μ€λ₯Έμͺ½ μλμ μλ μΉΈμΌλ‘ μ΄λνμ¬ μ΄λ£¨μ΄μ§λ€.
- λλ²μ§Έ ν λΆν° κ° μ΄μ νλͺ©μ νμνλ©° κ²½λ‘μ μ«μ ν©μ ꡬνλ€.
- νμ¬ μΉΈ
(i, j)
μ λλ¬ν μ μλ μμΉλ λ°λ‘ μ (i-1, j)
, μΌμͺ½ λκ°μ μ (i-1, j-1)
, μ€λ₯Έμͺ½ λκ°μ μ (i-1, j+1)
μ ν΄λΉλλ€. - λ°λΌμ νμ¬ μΉΈμ κ°
matrix[i][j]
κ³Ό μ΄μ μμΉμ κ° matrix[i-1][k] (k = j-1 ~ j+1)
μ λν κ° μ€ μ΅μκ°μ νμ¬ μΉΈμ κ° matrix[i][j]
μΌλ‘ νλ€.
- λ§μ§λ§ νμ κ° μ€ μ΅μ κ°μ κ²°κ³Ό κ°μΌλ‘ νλ€.
class Solution {
public int minFallingPathSum(int[][] matrix) {
int N = matrix.length;
for (int i = 1; i < N; ++i) {
for (int j = 0; j < N; ++j) {
int curr = matrix[i][j];
matrix[i][j] = Integer.MAX_VALUE;
for (int k = Math.max(j - 1, 0); k <= Math.min(j + 1, N - 1); ++k) {
matrix[i][j] = Math.min(matrix[i][j], curr + matrix[i - 1][k]);
}
}
}
int result = matrix[N - 1][0];
for (int i = 1; i < N; ++i) {
result = Math.min(result, matrix[N - 1][i]);
}
return result;
}
}