ํค์๋
- ๋์ ๊ณํ๋ฒ(Dynamic Programming)
- ๋ฉ๋ชจ์ด์ ์ด์ /ํ๋ทธ๋ ์ด์
๋์ ๊ณํ๋ฒ(Dynamic Programming)
- ํ๋์ ๋ฌธ์ ๋ฅผ ์ฌ๋ฌ๊ฐ๋ก ์์ ๋ฌธ์ ๋ก ๋๋๊ณ (๋ถํ ์ ๋ณต) ์ค๊ฐ์ ์์ ๋ฌธ์ ํด๋ฒ์ ์ฌ์ฌ์ฉํ์ฌ ํฐ ๋ฌธ์ ๋ฅผ ํจ๊ณผ์ ์ผ๋ก ํธ๋ ๋ฐฉ๋ฒ
(๋ฌธ์ ์ ์ผ๋ถ๋ถ์ ํ๊ณ ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ์ฌํ์ฉํ๋ ๋ฐฉ๋ฒ) - ๋์ ๊ณํ๋ฒ์ ์ฌ์ฉํ๊ธฐ ์ํ ์กฐ๊ฑด
1) ๋ฌธ์ ๊ฐ ๋ ์์ ๋ฌธ์ ๋ก ์ชผ๊ฐ์ง ๋
2) ์์ ๋ฌธ์ ์ ์๋ฃจ์
์ผ๋ก ๋ ํฐ ๋ฌธ์ ์ ์๋ฃจ์
์ ๊ตฌํ ์ ์์ ๋
3) ์ด ์์ ๋ฌธ์ ์ ๋ํ ํด๋ฒ์ ์ ์ฅํ๊ณ ๋ค์ ์ฌ์ฉํ์ฌ ๊ณ์ฐ์ ์๋ฅผ ๋ง์ด ์ค์ผ ์ ์์ ๋
์ฌ์ฉํ๊ฒ ๋๋ ์ํฉ : ์ด์ง ๊ฒ์, ์ต๋จ๊ฒฝ๋ก ์๊ณ ๋ฆฌ์ฆ, ์ต์ ํ ๋ฌธ์
์ธํ์ ๋ฌธ์ (๋งํฌ)๋จ์ ๋ถํ ์ ๋ณต : ๋ถํ ๋ ์๋ธ๋ฌธ์ (์์ ๋ฌธ์ )๊ฐ ๋ ๋ฆฝ์ -> ์ฆ, ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ์ฌ์ฌ์ฉํ์ง ์์
DP : ๋ถํ ๋ ์๋ธ๋ฌธ์ ์ ๊ฒฐ๊ณผ๋ฅผ ๋ค์ ์ฌ์ฉ -> ์ฒ๋ฆฌ ์๋๊ฐ ๋ ๋น ๋ฆ
[DP] ๋ฉ๋ชจ์ด์ ์ด์ (Memoization ; Topdown, ํํฅ์)
- ํ๋ฒ ๊ณ์ฐํ๋ ๊ฒฐ๊ณผ๋ฅผ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅํด์ ๋ค์ ์ฌ์ฉ
- ํฐ ๋ฌธ์ ์์ ํ์ ๋ฌธ์ ๋ก ์ ๊ทผํด์ ํ์ ๋ฌธ์ ์ ๋ํ ์ ๋ต์ ๊ณ์ฐํ๋์ง ์ํ๋์ง ๋ฉ๋ชจ๋ฆฌ์์ ํ์ธํ๋ฉด์ ๋ฌธ์ ๋ฅผ ํธ๋ ๋ฐฉ์
- ๋ต์ ์ฌํ์ฉํ๊ธฐ๋๋ฌธ์ ์ค๋ณต ๊ณ์ฐ์ ๋ฐฉ์ง
ํผ๋ณด๋์น ์์ด ์์
def memo_fib(input_value, save_memo={}):
if input_value <= 0:
return 0
elif input_value <= 1:
return 1
elif input_value in save_memo:
return save_memo[input_value]
else:
save_memo[input_value] = memo_fib(input_value-1, save_memo) + memo_fib(input_value-2, save_memo)
return save_memo[input_value]
[DP] ํ๋ทธ๋ ์ด์ (Tabulation ; Bottomup, ์ํฅ์)
- ํ์ ๋ฌธ์ ์ ์ ๋ต์ ์ด์ฉํด ๋ ํฐ ๋ฌธ์ ์ ์ ๋ต์ ํ์ด๋๊ฐ๋ ๋ฐฉ๋ฒ
- ์๋์์๋ถํฐ ๊ณ์ฐ์ ์ํํ๊ณ ๋์ ์ํค๋ฉด์ ์ ์ฐจ ์ ์ฒด ํฐ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๋ฐฉ์
ํผ๋ณด๋์น ์์ด ์์
def tabul_fib(input_value):
f = [0, 1]
if input_value <= 1:
return f[input_value]
for i in range(2, input_value+1):
f.append(f[i-1] + f[i-2])
return f[input_value]
'๐ฟ Data > ๋ถํธ์บ ํ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[TIL] ๋ณต์ต(1) ์ค์ฌ๊ทนํ์ ๋ฆฌ, ๊ฒฐ์ ๊ณ์ (0) | 2022.04.21 |
---|---|
[TIL] 107. ๊ทธ๋ฆฌ๋(Greedy; ํ์ ์๊ณ ๋ฆฌ์ฆ) (0) | 2022.04.14 |
[TIL] 105. BFS/DFS (0) | 2022.04.13 |
[TIL] 104. [์๋ฃ๊ตฌ์กฐ] ์ํ (0) | 2022.04.12 |
[TIL] 103. [์๋ฃ๊ตฌ์กฐ] ๊ทธ๋ํ (0) | 2022.04.12 |