알고리즘 설명
DP란?
오늘의 알고리즘 문제
정수 삼각형
접근 방법
소스코드
import java.util.*;
class Solution {
public int solution(int[][] triangle) {
int[][] dp = new int[triangle.length][triangle.length];
// for(int i=0; i<dp.length; i++) {
// Arrays.fill(dp[i], 0);
// }
dp[0][0] = triangle[0][0]; // 초기값
for(int i=1; i<triangle.length; i++) {
dp[i][0] = dp[i-1][0] + triangle[i][0];
for(int j=1; j<i+1; j++) {
dp[i][j] = Math.max(dp[i-1][j-1], dp[i-1][j]) + triangle[i][j];
}
}
// 마지막 라인에서 max값 찾기
int answer = 0;
for(int i=0; i<dp[dp.length-1].length; i++) {
answer = Math.max(answer, dp[dp.length-1][i]);
}
return answer;
}
}
Java
복사
등굣길
접근 방법
소스코드
class Solution {
public int solution(int m, int n, int[][] puddles) {
int answer = 0;
int[][] memo = new int[n+1][m+1]; // 갈 수 있는 길의 수 메모
for (int i = 0; i < puddles.length; i++) {
memo[puddles[i][1]][puddles[i][0]] = -1;
}
memo[1][1] = 1;
for (int i = 1; i < n+1; i++) {
for (int j = 1; j < m+1; j++) {
if(memo[i][j] == -1) {
// System.out.println(memo[i][j] + "입니다");
continue;
}
if(memo[i][j-1] >= 0 && memo[i][j] >= 0) { // 이전(왼쪽)에 숫자가 0이상이면 더하기
memo[i][j] = memo[i][j] + memo[i][j-1] % 1000000007;
}
if(memo[i-1][j] >= 0 && memo[i][j] >= 0) { // 이전(위쪽)에 숫자가 0이상이면 더하기
memo[i][j] = memo[i][j] + memo[i-1][j] % 1000000007;
}
}
}
answer = memo[n][m] % 1000000007;
return answer;
}
}
Java
복사