이 문제를 위에서 아래로 내려오면 최대값만 찾아서 풀이한다면 100% 오답이 난다. 이유는 이렇다.
7 -> 8(15) -> 1(16) -> 7(23) -> 5(28) // 정답은 30이다!
따라서, 우선 다음과 같이 삼각형 정수 배열을 저장하고, DP 배열을 초기화 해준다.
삼각형 배열 DP배열
7 0 0 0 0 0 0 0 0 0
3 8 0 0 0 0 0 0 0 0
8 1 0 0 0 0 0 0 0 0
2 7 4 4 0 0 0 0 0 0
4 5 2 6 5 4 5 2 6 5 <-- 삼각형의 가장 아래쪽 값으로 DP를 초기화 해준다.
그리고 DP 배열을 위에서 부터 탐색하며 내려간다.
import java.util.Scanner;
public class Main {
static int[][] arr;
static Integer[][] dp;
static int n;
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
n = in.nextInt();
// 값 채우기
arr = new int[n][n];
for (int i = 0; i < n; i++) {
for (int j = 0; j < i + 1; j++) {
arr[i][j] = in.nextInt();
}
}
// 탐색
dp = new Integer[n][n];
for (int i = 0; i < n; i++) {
dp[n - 1][i] = arr[n - 1][i];
}
System.out.println(search(0, 0));
}
static int search(int i, int j) {
if (i == n - 1) {
return dp[i][j];
}
if (dp[i][j] == null) {
dp[i][j] = Math.max(search(i + 1, j), search(i + 1, j + 1)) + arr[i][j];
}
return dp[i][j];
}
}
'Algorithm' 카테고리의 다른 글
백준 11651번 좌표 정렬하기 2 (0) | 2023.03.17 |
---|---|
백준 12865번 평범한 배낭 (0) | 2023.03.17 |
백준 1149번 RGB거리 (0) | 2023.03.16 |
백준 9461번 파도반수열 (0) | 2023.03.16 |
백준 9184번 신나는 함수 실행 (0) | 2023.03.15 |
댓글