Skip to content

Commit 9b7270e

Browse files
committed
feat: 3주차 - ã PG_43105 정수 삼각형 문제 풀이[윤주찬]
1 parent 4a34e8e commit 9b7270e

File tree

1 file changed

+57
-0
lines changed

1 file changed

+57
-0
lines changed

src/week03/Juchan/PG_43105.java

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
package week03.Juchan;
2+
3+
class Solution {
4+
public int solution(int[][] triangle) {
5+
int n = triangle.length;
6+
int[][] dp = new int[n][n]; // 합을 넣어둘 배열 생성
7+
8+
dp[0][0] = triangle[0][0]; // 초기값은 꼭대기의 값
9+
10+
for (int i = 1; i < n; i++) {
11+
//맨 왼쪽
12+
dp[i][0] = dp[i - 1][0] + triangle[i][0];
13+
for (int j = 1; j < i; j++) {
14+
dp[i][j] = Math.max(dp[i - 1][j - 1], dp[i - 1][j]) + triangle[i][j]; // 중간에 있는 값은 전 인덱스의 왼쪽 값과 오른쪽 값중 큰 값으로 설정
15+
}
16+
17+
// 맨 오른쪽
18+
dp[i][i] = dp[i - 1][i - 1] + triangle[i][i];
19+
}
20+
int answer = 0;
21+
for (int i = 0; i < n; i++) {
22+
answer = Math.max(answer, dp[n - 1][i]); // 최댓값을 갱신
23+
}
24+
return answer;
25+
}
26+
}
27+
28+
public class PG_43105 {
29+
public static void main(String[] args) {
30+
Solution s = new Solution();
31+
int[][] triangle = {
32+
{7},
33+
{3, 8},
34+
{8, 1, 0},
35+
{2, 7, 4, 4},
36+
{4, 5, 2, 6, 5}
37+
};
38+
int result = s.solution(triangle);
39+
System.out.println(result); // 예상 출력: 30
40+
}
41+
}
42+
43+
44+
/**
45+
* 문제
46+
* 숫자가 들어간 피라미드 형태의 삼각형이 주어진다.
47+
* 꼭대기부터 바닥까지 인접한 숫자를 따라 내려가면서 만들 수 있는 최대 합을 구하라.
48+
* <p>
49+
* 풀이 요약
50+
* - 각 위치까지의 최대 합을 저장할 dp 배열을 선언한다.
51+
* - 첫 번째 행(dp[0][0])은 초기값으로 triangle[0][0]을 넣는다.
52+
* - 그다음 행부터는 규칙적으로 채운다:
53+
* 1. 맨 왼쪽 값(dp[i][0])은 바로 위 행의 같은 인덱스(dp[i-1][0])에서만 내려올 수 있다.
54+
* 2. 맨 오른쪽 값(dp[i][i])은 바로 위 행의 오른쪽 대각선 왼쪽(dp[i-1][i-1])에서만 내려올 수 있다.
55+
* 3. 그 외 중간 값(dp[i][j])은 바로 위(dp[i-1][j]) 또는 왼쪽 대각선(dp[i-1][j-1]) 중 큰 값에 현재 triangle[i][j]를 더한다.
56+
* - 마지막 행(dp[n-1])에서 최댓값을 찾아서 반환한다.
57+
*/

0 commit comments

Comments
 (0)