๋ฌธ์
์ผ๊ฐํ์ ๊ผญ๋๊ธฐ์์ ๋ฐ๋ฅ๊น์ง ์ด์ด์ง๋ ๊ฒฝ๋ก ์ค, ๊ฑฐ์ณ๊ฐ ์ซ์์ ํฉ์ด ๊ฐ์ฅ ํฐ ๊ฒฝ์ฐ๋ฅผ ์ฐพ๋ ๋ฌธ์ ์ ๋๋ค. ์ด ๋ฌธ์ ๋ ๋์ ํ๋ก๊ทธ๋๋ฐ(DP)์ผ๋ก ํด๊ฒฐํ๊ธฐ์ ์ ํฉํฉ๋๋ค. ๊ทธ ์ด์ ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
- ์ผ๊ฐํ์ ๊ผญ๋๊ธฐ์์ ํน์ ์์น๊น์ง์ ์ต๋ ํฉ์ ์ด์ ์์น๋ค์ ์ต๋ ํฉ์ ๊ธฐ๋ฐํฉ๋๋ค.
- ์ฌ๋ฌ ๊ฒฝ๋ก๊ฐ ๊ฐ์ ์์น๋ฅผ ์ง๋๊ฐ ์ ์์ด ์ค๋ณต ๊ณ์ฐ์ด ๋ฐ์ํฉ๋๋ค.
ํ์ด
์ฒ์์๋ ์ฌ๊ท๋ฅผ ํ์ฉํ Top-down ๋ฐฉ์์ผ๋ก ์ ๊ทผํ์ต๋๋ค.
- ์๊ฐ๋ณต์ก๋:
O(N²)
(N: ์ผ๊ฐํ์ ๋์ด)
function solution(triangle) {
const memo = {};
function dp(i, j) {
// ์ผ๊ฐํ์ ๋ง์ง๋ง ํ์ ๋๋ฌํ ๊ฒฝ์ฐ
if (i === triangle.length - 1) {
return triangle[i][j];
}
// ๋ฉ๋ชจ์ด์ ์ด์
ํค ์์ฑ
const key = `${i},${j}`;
if (key in memo) {
return memo[key];
}
// ์ผ์ชฝ ์์๊ณผ ์ค๋ฅธ์ชฝ ์์ ์ค ์ต๋๊ฐ ๊ณ์ฐ
const leftPath = dp(i + 1, j);
const rightPath = dp(i + 1, j + 1);
memo[key] = Math.max(leftPath, rightPath) + triangle[i][j];
return memo[key];
}
return dp(0, 0);
}
์ด ๋ฐฉ์์ ์ ํ์ฑ ํ ์คํธ๋ ํต๊ณผํ์ง๋ง, ํจ์จ์ฑ ํ ์คํธ๋ฅผ ํต๊ณผํ์ง ๋ชปํ์ต๋๋ค. ์ฌ๊ท ํจ์๋ฅผ ์ฌ์ฉํ๋ค๋ณด๋ ํจ์ ํธ์ถ ์ค๋ฒํค๋๊ฐ ๋ฐ์ํด์ ๊ทธ๋ฐ ๊ฒ ๊ฐ์์ต๋๋ค.
ํจ์จ์ฑ์ ๊ฐ์ ํ๊ธฐ ์ํด ๋ฐ๋ณต๋ฌธ๋ง ์ฌ์ฉํ๋ Bottom-up ๋ฐฉ์์ผ๋ก ์ฝ๋๋ฅผ ์์ ํ์ต๋๋ค.
- ์๊ฐ๋ณต์ก๋: O(N²) (N: ์ผ๊ฐํ์ ๋์ด)
function solution(triangle) {
const n = triangle.length;
// ์ผ๊ฐํ์ ๋ง์ง๋ง ํ์ผ๋ก dp ๋ฐฐ์ด ์ด๊ธฐํ
let dp = [...triangle[n-1]];
// ์๋์์ ์๋ก ๊ณ์ฐ
for (let i = n - 2; i >= 0; i--) {
const newDp = [];
for (let j = 0; j <= i; j++) {
// ํ์ฌ ์์น์์ ๊ฐ๋ฅํ ์ต๋ ํฉ ๊ณ์ฐ
newDp[j] = triangle[i][j] + Math.max(dp[j], dp[j+1]);
}
dp = newDp;
}
return dp[0];
}
ํด๋น ๋ฐฉ์์ ์ผ๊ฐํ์ ๋ง์ง๋ง ํ๋ถํฐ ์์ํ์ฌ ์๋ก ์ฌ๋ผ๊ฐ๋ฉด์ ๊ฐ ์์น์์์ ์ต๋ ๊ฒฝ๋ก ํฉ์ ๊ณ์ฐํฉ๋๋ค. ๊ฐ ๋จ๊ณ์์๋ ์ด์ ์ ๊ณ์ฐํ ๊ฒฐ๊ณผ๋ฅผ ์ฌ์ฉํ์ฌ ํ์ฌ ์์น์์์ ์ต๋ ํฉ์ ๊ตฌํฉ๋๋ค.
์ฑ๋ฅ ๋ถ์
๋ ์ ๊ทผ๋ฒ ๋ชจ๋ ์๊ฐ ๋ณต์ก๋๋ O(N²)์ ๋๋ค. ๊ฐ ์์น์์์ ๊ณ์ฐ์ ์์ ์๊ฐ์ด ์์๋๋ฉฐ, ์ผ๊ฐํ์ ์๋ ๋ชจ๋ ์์น๋ฅผ ํ ๋ฒ์ฉ ๋ฐฉ๋ฌธํฉ๋๋ค.
๊ทธ๋ฌ๋ ๊ณต๊ฐ ๋ณต์ก๋ ์ธก๋ฉด์์๋ ์ฐจ์ด๊ฐ ์์ต๋๋ค:
- Top-down: O(N²) - ๋ชจ๋ ์์น์ ๋ํ ๋ฉ๋ชจ์ด์ ์ด์ ํ ์ด๋ธ ํ์
- Bottom-up: O(N) - ํ ๋ฒ์ ํ๋์ ํ์ ๋ํ ์ ๋ณด๋ง ์ ์ฅ
์ด ๋ฌธ์ ์์๋ ์ผ๊ฐํ์ ๋์ด๊ฐ ์ต๋ 500์ด๋ฏ๋ก, ์ํฅ์ ์ ๊ทผ๋ฒ์ด ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋ ์ธก๋ฉด์์ ๋ ํจ์จ์ ์ ๋๋ค.
'๐ข Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Javascript][๋ฐฑ์ค] 1091๋ฒ - ์นด๋ ์๊ธฐ (0) | 2025.03.27 |
---|---|
[Javascript][๋ฐฑ์ค] ์ฒด์คํ ๋ค์ ์น ํ๊ธฐ 2 (0) | 2025.03.25 |
[Javascript][๋ฐฑ์ค] ์ฒด์คํ ๋ค์ ์น ํ๊ธฐ (0) | 2024.10.05 |
[Javascript][Programmers] ์ ๊ณ ๊ฒฐ๊ณผ ๋ฐ๊ธฐ (2) | 2024.10.02 |
[Javascript][Programmers] ๋ฒ ์คํธ ์จ๋ฒ (1) | 2024.10.01 |