๋ฐ์ํ
๐๋ฌธ์
์ฝ๋ฉํ ์คํธ ์ฐ์ต - ์ ์ ์ผ๊ฐํ | ํ๋ก๊ทธ๋๋จธ์ค ์ค์ฟจ (programmers.co.kr)
โจํต์ฌ ๋ด์ฉ
- ๊ฑฐ์ณ๊ฐ ์ซ์์ ํฉ์ด ๊ฐ์ฅ ํฐ ๊ฒฝ์ฐ ์ฐพ๊ธฐ
- ์๋ ์นธ์ผ๋ก ์ด๋ํ ๋๋ ๋๊ฐ์ ๋ฐฉํฅ์ผ๋ก ํ ์นธ "์ค๋ฅธ์ชฝ ๋๋ ์ผ์ชฝ"์ผ๋ก๋ง ์ด๋ ๊ฐ๋ฅ
๐คํด๊ฒฐ ์์ด๋์ด
์ ํ: DP
ํ์ฌ ์์น(i, j)์์ ์ต๋๊ฐ์ด ๋๋ ค๋ฉด
์ผ์ชฝ ์(i-1, j-1) vs ์ค๋ฅธ์ชฝ ์(i-1, j) ์ค ์ด๋ ๋ฐฉํฅ์ผ๋ก ์์ผ ์ต๋๊ฐ์ด ๋๋์ง ์ฐพ๊ธฐ
โ ์ ๋ต ์ฝ๋ (Python)
def solution(triangle):
n = len(triangle)
m = len(triangle[n - 1])
# 1. dp ์ ์ - (i, j) ์์น๊น์ง์ ๊ฒฝ๋ก ์ค ์ซ์์ ํฉ์ ์ต๋๊ฐ
dp = [[0 for _ in range(n)] for _ in range(m)]
# 2. dp ์ด๊ธฐํ
# 2-1. dp[0][0] ์ด๊ธฐํ
dp[0][0] = triangle[0][0]
for i in range(1, n):
# // 2-2. dp[i][0] ์ด๊ธฐํ
dp[i][0] = dp[i - 1][0] + triangle[i][0]
# //2-3. dp[i][cnt] ์ด๊ธฐํ
dp[i][i] = dp[i - 1][i - 1] + triangle[i][i]
# 3. ์ ํ์
for i in range(2, n):
for j in range(1, i):
dp[i][j] = max(dp[i - 1][j], dp[i - 1][j - 1]) + triangle[i][j]
return max(dp[n - 1])
โ ์ ๋ต ์ฝ๋ (Java)
class Solution {
public int solution(int[][] triangle) {
int n = triangle.length;
int m = triangle[n-1].length;
// 1. dp ์ ์ - (i, j) ์์น๊น์ง์ ๊ฒฝ๋ก ์ค ์ซ์์ ํฉ์ ์ต๋๊ฐ
int[][] dp = new int[n][m];
// 2. dp ์ด๊ธฐํ
// 2-1. dp[0][0] ์ด๊ธฐํ
dp[0][0] = triangle[0][0];
for (int i = 1 ; i < n; i++) {
// 2-2. dp[i][0] ์ด๊ธฐํ
dp[i][0] = dp[i-1][0] + triangle[i][0];
//2-3. dp[i][cnt] ์ด๊ธฐํ
dp[i][i] = dp[i-1][i-1] + triangle[i][i];
}
// 3. ์ ํ์
for (int i = 2; i < n; i++) {
for (int j = 1; j < i; j++) {
dp[i][j] = Math.max(dp[i-1][j-1], dp[i-1][j]) + triangle[i][j];
}
}
// 4. output
int mx = 0;
for (int j = 0; j < m; j++)
mx = Math.max(mx, dp[n-1][j]);
return mx;
}
}
๋ฐ์ํ
'algorithm > Programmers' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Programmers] ๋ฆฌ์ฝ์ณ ๋ก๋ด (Python) (0) | 2024.07.11 |
---|---|
[Programmers] ๋ ์ ์ฌ์ด์ ์ ์ ์(Python, Java) (0) | 2024.07.04 |
[Programmers] ์๊ฒฉ ์์คํ (Python, Java) (0) | 2024.07.03 |
[Programmers] ๋ฑ๊ตฃ๊ธธ (Python, Java) (0) | 2024.07.02 |
[python]level1. ํคํจ๋ ๋๋ฅด๊ธฐ (0) | 2022.02.08 |