๋ฐ์ํ
๐ ๋ค์ด๋๋ฏนํ๋ก๊ทธ๋๋ฐ(Dynamic Programming)์ด๋
- ํ๋์ ๋ฌธ์ ๋ ๋จ ํ ๋ฒ๋ง ํธ๋ ๋ฐฉ๋ฒ! ๋ค์ด๋๋ฏนํ๋ก๊ทธ๋๋ฐ (์ดํ DP)
- ์์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์ฌ ํฐ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๋ถํ ์ ๋ณต๊ณผ ์ ์ฌํ๋ค๊ณ ์๊ฐํ ์ ์์ง๋ง, ๋ถํ ์ ๋ณต์ ๊ฒฝ์ฐ ํ๋ฒ ํ์๋ ๋ฌธ์ ๋ฅผ ๋ค์ ํธ๋ ๋นํจ์จ์ ์ธ ๋จ์ ์ ๊ฐ์ง๊ณ ์๋ค. (์ผ๋ถ ๊ฒฝ์ฐ ์ ์ธ (๋ณํฉ์ ๋ ฌ))
- ๋ถํ ์ ๋ณต๊ณผ DP์ ์ฐจ์ด๋ฅผ ๋ณด์ฌ์ฃผ๋ ๋ํ์ ์ธ ์์๋ก๋ ํผ๋ณด๋์น ์์ด์ด ์๋ค.
- ํผ๋ณด๋์น ์์ด: ๋ฐ๋ก ์๊ณผ ์์ ๋ ์นธ์ ์ซ์์ ํฉ์ ๊ตฌํด์ ๋ํ๋ด๋ ์์ด
- 1, 1, 2, 3, 5, 8, 13, 21, 34, 55
- ๋ถํ ์ ๋ณต์ ์ด์ฉํ๋ค๋ฉด ์ด๋ฏธ ๊ตฌํ ์ซ์๋ค์ ๋ค์ ๊ณ์ฐํ๋ ๋จ์ ์ด ์๋ค.
- ์์ ์ฌ์ง์ ๋ณด๋ฉด 13์ ๊ตฌํ๋๊ฒ 2๋ฒ, 12 3๋ฒ, 11 3๋ฒ ๊ณ์ฐํ๋ ๊ฒ์ ๋ณผ ์ ์๋ค.
- ์ด๋ฐ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๋ฉ๋ชจ์ด์ ์ด์ ์ ์ฌ์ฉํ๋ค๋ ์ !
- ์ด๋ฏธ ๊ณ์ฐ๋ ๊ฒฐ๊ณผ๋ ๋ฆฌ์คํธ์ ์ ์ฅ์ ํด๋๊ณ ํ์ํ ๋ ๊บผ๋ด์ ์ฌ์ฉํ๋ค.
๐ ๋ค์ด๋๋ฏนํ๋ก๊ทธ๋๋ฐ(Dynamic Programming) ๊ตฌํ
# ํผ๋ณด: 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, ...
# ํผ๋ณด๋ฅผ ๋ถํ ์ ๋ณต์ผ๋ก ๊ตฌํ๋ ๋ฐฉ๋ฒ
import time
def fibo1(x):
if x == 1:
return 1
if x == 2:
return 1
return fibo1(x - 2) + fibo1(x - 1)
start = time.time()
print(fibo1(37))
end = time.time()
print(f'๋ถํ ์ ๋ณต: {end - start}')
# ํผ๋ณด๋ฅผ DP๋ก ๊ตฌํ๋ ๋ฐฉ๋ฒ
dp = [0] * 100
def fibo2(x):
if x == 1:
return 1
if x == 2:
return 1
if dp[x] != 0:
return dp[x]
dp[x] = fibo2(x - 2) + fibo2(x - 1)
return dp[x]
start = time.time()
print(fibo2(37))
end = time.time()
print(f'๋ค์ด๋๋ฏนํ๋ก๊ทธ๋๋ฐ: {end - start}')
'''
24157817
๋ถํ ์ ๋ณต: 6.408001184463501
24157817
๋ค์ด๋๋ฏนํ๋ก๊ทธ๋๋ฐ: 0.0
'''
๐ ๋ค์ด๋๋ฏนํ๋ก๊ทธ๋๋ฐ(Dynamic Programming) ํน์ง
- ๋ณดํต ์๊ณ ๋ฆฌ์ฆ์ ํ ๋ ํ์ด๊ฐ ๋๋ฌด ๊ฐ๋จํ์ง๋ง ์๊ฐ ์ด๊ณผ๊ฐ ๋ฐ์ํ๋ฉด ์ด ์น๊ตฌ๋ฅผ ๋ ์ฌ๋ฆฌ์.
๋ฐ์ํ
'CS > Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์๋ผํ ์คํ ๋ค์ค์ ์ฒด(Sieve Of Eratosthenes) (0) | 2020.10.03 |
---|---|
๋ค์ต์คํธ๋ผ(dijkstra) (0) | 2020.10.02 |
ํฌ๋ฃจ์ค์นผ ์๊ณ ๋ฆฌ์ฆ(kruskal) (0) | 2020.09.30 |
์๋ก์ ์งํฉ(Disjoint-set) (0) | 2020.09.29 |
๊น์ด ์ฐ์ ํ์(Depth First Search, DFS) (0) | 2020.09.28 |