๋์ ๊ณํ๋ฒ(Dynamic Programming)
1. ๋์ ๊ณํ๋ฒ
2. ๊ตฌํ ๋ฐฉ๋ฒ(ํผ๋ณด๋์น ์์ )
1. ๋์ ๊ณํ๋ฒ
ํ๋์ ํฐ ๋ฌธ์ ๋ฅผ ํฐ ๋ฌธ์ ๋ฅผ ์์ ๋ฌธ์ ๋ก ๋๋์ด ํด๊ฒฐํ๊ณ ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ์ ์ฅํ์ฌ ์ค๋ณต ๊ณ์ฐ์ ํผํ๋ ํ๋์ ๋ฐฉ๋ฒ๋ก ์ ๋๋ค.
๋์ ๊ณํ๋ฒ์ ํ์ฉํ๋ ๋ํ ๋ฌธ์ ๋ก๋ ํผ๋ณด๋์น ์์ด, ์ต์ฅ ๊ณตํต ๋ถ๋ถ ์์ด(LCS), ๋ฐฐ๋ญ ๋ฌธ์ , ์ต๋จ ๊ฒฝ๋ก, ๋์ ๊ฑฐ์ค๋ฆ๋ ๋ฌธ์ ๋ฑ์ด ์์ต๋๋ค.
DP(Dynamic Programming) ๋ฌธ์ ๋ฅผ ๋ง๋ฌ์ ๋๋ ๋ถ๋ถ ๋ฌธ์ ๋ฅผ ํ์ฉํ ์ ์๋์ง, ์ค๋ณต ๊ณ์ฐ์ ์ค์ผ ์ ์๋์ง 2๊ฐ์ง ์ฌํญ์ ๊ณ ๋ฏผํ์ฌ ์ ์ฉํ๋ฉด ๋ฉ๋๋ค. ํด๋น ํฌ์คํ ์์๋ ํผ๋ณด๋์น ์์ด์ผ๋ก ๊ตฌํํด๋ณด๊ฒ ์ต๋๋ค.
2. ๊ตฌํ ๋ฐฉ๋ฒ(ํผ๋ณด๋์น ์์ )
- Bottom-Up ๋ฐฉ์(๋ฐ๋ณต๋ฌธ)
์๋(๊ฐ์ฅ ์์ ์ํ)์์๋ถํฐ ์(ํฐ ์ํ)๋ก ๊ณ์ฐ์ ์ํํ๋ ๋ฐฉ์์ ๋๋ค.
int fib(int n) {
int dp[n + 1];
dp[0] = 0;
dp[1] = 1;
for (int i = 2; i <= n; i++) {
dp[i] = dp[i - 1] + dp[i - 2];
}
return dp[n];
}
์ ํ์์ ์ฌ์ฉํด์ dp[i]๋ฅผ ๊ณ์ฐํฉ๋๋ค.
i | dp[i] ๊ฐ | ์ค๋ช |
0 | 0 | 0 (์ด๊ธฐ๊ฐ) |
1 | 1 | 1 (์ด๊ธฐ๊ฐ) |
2 | 1 | dp[2] = 1 + 0 = 1 |
3 | 2 | dp[3] = 1 + 1 = 2 |
4 | 3 | dp[4] = 2 + 1 = 3 |
5 | 5 | dp[5] = 3 + 2 = 5 |
์์ ๊ฐ์ ๋ฐฉ์์ผ๋ก ์์ ๊ฐ๋ถํฐ ์ฐจ๋ก๋๋ก ์ฑ์๋๊ฐ๊ธฐ ๋๋ฌธ์ ์ค๋ณต ๊ณ์ฐ์ ๋ฐฉ์งํฉ๋๋ค.
- Top-Down ๋ฐฉ์(๋ฉ๋ชจ์ด์ ์ด์ )
์(๊ฐ์ฅ ํฐ ์ํ)์์๋ถํฐ ์๋(์์ ์ํ)๋ก ๊ณ์ฐ์ ์ํํ๋ ๋ฐฉ์์ ๋๋ค.
ํ ๋ฒ ๊ณ์ฐํ ๊ฒฐ๊ณผ๋ฅผ ์ ์ฅํ์ฌ ์ค๋ณต ํธ์ถ์ ์ค์ ๋๋ค.
int fib(int n) {
if (n <= 1) return n;
if (dp[n] != 0) return dp[n];
return dp[n] = fib(n - 1) + fib(n - 2);
}
if (n <= 1) return n; fib(0), fib(1)์ ๊ณ ์ ๋ ๊ฐ์ด ์กด์ฌํ๊ธฐ ๋๋ฌธ์ ๊ทธ๋๋ก ๋ฐํํด์ค๋๋ค.
if (dp[n] != 0) return dp[n]; ์ฒ์์ dp ๋ฐฐ์ด์ ๋ชจ๋ 0์ผ๋ก ์ด๊ธฐํํ๊ธฐ ๋๋ฌธ์ ๊ฐ์ด ๋ค์ด๊ฐ์ง ์์ ๋ฐฐ์ด์ ๊ฐ์ 0์ผ ๊ฒ์ ๋๋ค. ๋ง์ฝ ๊ฐ์ด ๋ค์ด๊ฐ๋ค๋ฉด ์ด๋ฏธ ๊ณ์ฐ๋ ๊ฐ์ด๋ฏ๋ก ์ฌ๊ท ํธ์ถ์์ด ๋ฐํํฉ๋๋ค.
return dp[n] = fib(n - 1) + fib(n - 2); ์ฌ๊ท์ ์ผ๋ก ํธ์ถํ์ฌ dp[n]์ ์ ์ฅํฉ๋๋ค.
DP๋ ๋ง์ ๋ฌธ์ ๋ฅผ ๋ณด๋ฉด ๊ตฌํํ๊ธฐ ์ฝ์ง ์๋๋ผ๊ตฌ์..
๊พธ์คํ ๋ฌธ์ ๋ฅผ ํ๊ณ ํ์ตํ๊ฒ ์ต๋๋ค.
์ฐธ๊ณ ์ฌ์ดํธ
์๊ณ ๋ฆฌ์ฆ - Dynamic Programming(๋์ ๊ณํ๋ฒ)
1. ๊ฐ์ DP, ์ฆ ๋ค์ด๋๋ฏน ํ๋ก๊ทธ๋๋ฐ(๋๋ ๋์ ๊ณํ๋ฒ)์ ๊ธฐ๋ณธ์ ์ธ ์์ด๋์ด๋ก ํ๋์ ํฐ ๋ฌธ์ ๋ฅผ ์ฌ๋ฌ ๊ฐ์ ์์ ๋ฌธ์ ๋ก ๋๋์ด์ ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ์ ์ฅํ์ฌ ๋ค์ ํฐ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ๋ ์ฌ์ฉํ๋ ๊ฒ์ผ๋ก
hongjw1938.tistory.com
๋ฌธ์ ๊ฐ ์์ผ๋ฉด ๋๊ธ ๋จ๊ฒจ์ฃผ์ธ์ !
ํผ๋๋ฐฑ์ ์ธ์ ๋ ํ์์ ๋๋ค <3
'๐ก Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Sort] ์ ๋ ฌ (0) | 2025.02.03 |
---|---|
[Subsequence] LIS์ LCS (0) | 2025.02.03 |
[Graph] ๊น์ด ์ฐ์ ํ์(DFS)๊ณผ ๋๋น ์ฐ์ ํ์(BFS) (0) | 2025.02.03 |
[Greedy] Knanspack ์๊ณ ๋ฆฌ์ฆ - C์ธ์ด (0) | 2025.02.03 |
[DP] Knapsack ์๊ณ ๋ฆฌ์ฆ - C์ธ์ด (0) | 2025.01.24 |