โค DP ์๊ณ ๋ฆฌ์ฆ์ด๋?
ํ๋์ ํฐ ๋ฌธ์ ๋ฅผ ์ฌ๋ฌ ๊ฐ์ ์์ ๋ฌธ์ ๋ก ๋๋์ด์ ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ์ ์ฅํ์ฌ ๋ค์ ํฐ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๋ฐฉ์์ ์ฌ์ฉํ์ฌ, ์ฌ๋ฌ ๋ฒ ๋ฐ๋ณต๋๋ ๋์ผํ ๋ฌธ์ ๋ฅผ ๊ณ์ฐํ ๋์ ๋นํจ์จ์ฑ์ ๋ฐฉ์งํ๋ ํด๊ฒฐ ๋ฐฉ๋ฒ์ด๋ค. ํฐ ๋ฌธ์ ๋ฅผ ์์ ๋ฌธ์ ๋ก ์ชผ๊ฐ์ ๊ทธ ๋ต์ ์ ์ฅํด๋๊ณ ์ฌํ์ฉํ๋ค.

์์ ๊ทธ๋ฆผ์ ๋ณด๋ฉด ๊ฐ์ ํจ์๋ค์ด ์ฌ๋ฌ๋ฒ ํธ์ถ๋๋ ๊ฒ์ ๋ณผ ์ ์๋ค. ์ปดํจํฐ ์์์ ์ฐ์ฐ์ ํ ๋ ๊ฐ์ ํจ์๋ฅผ ์ฌ๋ฌ ๋ฒ ํธ์ถํ๊ณ ์ฌ์ฉํ๋ค ๋ณด๋ฉด ๋ฉ๋ชจ๋ฆฌ ๋ญ๋น๊ฐ ๋๊ณ , ์ฐ์ฐ ์๋๋ ๋์ด๋๊ธฐ ๋๋ฌธ์ ๋นํจ์จ์ ์ด๋ค. ์ด๋ฌํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด์ ์ฌ์ฉํ๋ ๊ฒ์ด ๋์ ๊ณํ๋ฒ์ด๋ค.
DP ์๊ณ ๋ฆฌ์ฆ์ผ๋ก ํด๊ฒฐํ ์ ์๋ ๋ํ์ ์ธ ์์๋ก ํผ๋ณด๋์น ์์ด์ด ์๋ค. ํผ๋ณด๋์น ์์ด์ ์ด์ ๋ ํญ์ ํฉ์ ํ์ฌ์ ํญ์ผ๋ก ์ค์ ํ๋ ํน์ง์ด ์๋ ์์ด์ด๋ค. ํผ๋ณด๋์น ์์ด์ ๋ค์๊ณผ ๊ฐ์ ํํ๋ก ์ด์ด์ง๋ค.

์๋ฅผ ์์์ผ๋ก ํํํ๋ฉด, n ๋ฒ์งธ ํผ๋ณด๋์น ์ = (n - 1)๋ฒ์งธ ํผ๋ณด๋์น ์ + (n - 2)๋ฒ์งธ ํผ๋ณด๋์น ์
๋จ, 1๋ฒ์งธ ํผ๋ณด๋์น ์ = 1, 2๋ฒ์งธ ํผ๋ณด๋์น ์ = 1
ํ๋ก๊ทธ๋๋ฐ์์๋ ์ด๋ฌํ ์์ด์ ๋ฐฐ์ด์ด๋ ๋ฆฌ์คํธ๋ก ํํํ ์ ์๋ค. ํ์ด์ฌ์์๋ ๋ฆฌ์คํธ ์๋ฃํ์, C/C++์ ์๋ฐ์์๋ ๋ฐฐ์ด์ ์ด์ฉํ์ฌ ์ฒ๋ฆฌํ๋ค. (ํ์๋ ํ์ด์ฌ์ผ๋ก)
๊ตฌํ ๋ฐฉ๋ฒ - โ Top-Down (ํํฅ์, Memoization ๋ฐฉ์)
dp = [0] * (n+1)
def fibo(n):
if n == 1 or n == 2:
return 1
if dp[n] == 0:
dp[n] = fibo(n - 1) + fibo(n - 2)
return dp[n]
print(fibo(n))
โ Memoization(๋ฉ๋ชจ์ด์ ์ด์ )์ ์ด์ ์ ํ์ธํ๋ ๋ฌธ์ ๋ฅผ ๋ฉ๋ชจํ๊ฒ ๋ค๋ ๋ป์ด๋ค. ํํฅ์์ ํ์ ๋ฌธ์ ์ ๋ํ ์ ๋ต์ ๊ณ์ฐํ๋์ง ํ์ธํด ๊ฐ๋ฉด์ ํ์ด๋๊ฐ๋ค.
๊ตฌํ ๋ฐฉ๋ฒ - โก Bottom-Up (์ํฅ์, Tabulation ๋ฐฉ์)
dp = [0]*(n + 1)
dp[1] = 1
def fibo(n):
for i in range(2, n + 1):
dp[i] = dp[i - 1] + dp[i - 2]
return dp[n]
print(fibo(n))
โ Tabulation(ํ๋ทธ๋ ์ด์ )์ ๋ํ๋ผ๋ ๋ป์ธ๋ฐ ๋ํ์์ผ๋ก ์ ์ฅํ๋ ๊ฑธ ๋งํ๋ค. ์ํฅ์์ ๋ ์์ ํ์ ๋ฌธ์ ๋ถํฐ ์ดํ ํ ์์ ๋ฌธ์ ์ ์ ๋ต์ ์ด์ฉํด ํฐ ๋ฌธ์ ์ ์ ๋ต์ ํ์ด๋๊ฐ๋ค.
โค DP ์ฌ์ฉ ์กฐ๊ฑด
• Overlapping Subproblems(๊ฒน์น๋ ๋ถ๋ถ ๋ฌธ์ )
- ๋์ผํ ์์ ๋ฌธ์ ๋ค์ด ๋ฐ๋ณตํ์ฌ ๋ํ๋๋ ๊ฒฝ์ฐ์ ์ฌ์ฉ
• Optional Substructure(์ต์ ๋ถ๋ถ ๊ตฌ์กฐ)
- ๋ถ๋ถ ๋ฌธ์ ์ ์ต์ ๊ฒฐ๊ณผ ๊ฐ์ ์ฌ์ฉํด ์ ์ฒด ๋ฌธ์ ์ ์ต์ ๊ฒฐ๊ณผ๋ฅผ ๋ผ ์ ์๋ ๊ฒฝ์ฐ์ ์ฌ์ฉ
โค DP ๋ฌธ์ ํ์ด๋ณด๊ธฐ
2748๋ฒ: ํผ๋ณด๋์น ์ 2
ํผ๋ณด๋์น ์๋ 0๊ณผ 1๋ก ์์ํ๋ค. 0๋ฒ์งธ ํผ๋ณด๋์น ์๋ 0์ด๊ณ , 1๋ฒ์งธ ํผ๋ณด๋์น ์๋ 1์ด๋ค. ๊ทธ ๋ค์ 2๋ฒ์งธ ๋ถํฐ๋ ๋ฐ๋ก ์ ๋ ํผ๋ณด๋์น ์์ ํฉ์ด ๋๋ค. ์ด๋ฅผ ์์ผ๋ก ์จ๋ณด๋ฉด Fn = Fn-1 + Fn-2 (n ≥ 2)๊ฐ
www.acmicpc.net
ํ์ด
https://dev-cloud.tistory.com/171
↓ DP์ ๋ํ ๋ ๋ง์ ์ค๋ช ↓
์๊ณ ๋ฆฌ์ฆ - Dynamic Programming(๋์ ๊ณํ๋ฒ)
1. ๊ฐ์ DP, ์ฆ ๋ค์ด๋๋ฏน ํ๋ก๊ทธ๋๋ฐ(๋๋ ๋์ ๊ณํ๋ฒ)์ ๊ธฐ๋ณธ์ ์ธ ์์ด๋์ด๋ก ํ๋์ ํฐ ๋ฌธ์ ๋ฅผ ์ฌ๋ฌ ๊ฐ์ ์์ ๋ฌธ์ ๋ก ๋๋์ด์ ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ์ ์ฅํ์ฌ ๋ค์ ํฐ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ๋ ์ฌ์ฉํ๋ ๊ฒ์ผ๋ก
hongjw1938.tistory.com
'๐งฉ Algorithm > ๊ฐ๋ ๋ฐ ์๋ฃ๊ตฌ์กฐ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [Algorithm] ์ต์ ํ(Min Heap) (3) | 2024.11.16 |
|---|---|
| [Algorithm] Two-Pointers(ํฌ ํฌ์ธํฐ) (3) | 2024.11.15 |
| [์๊ณ ๋ฆฌ์ฆ] ์๋ผํ ์คํ ๋ค์ค์ ์ฒด (1) | 2023.09.23 |
| [์๊ณ ๋ฆฌ์ฆ] BFS/DFS ์๊ณ ๋ฆฌ์ฆ (๊ทธ๋ํ ํ์) (0) | 2023.05.15 |
| Greedy (๊ทธ๋ฆฌ๋ ์๊ณ ๋ฆฌ์ฆ) (0) | 2023.05.07 |