- ์ปดํจํฐ๋ ์ฐ์ฐ ์๋์ ํ๊ณ๊ฐ ์๊ณ , ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ์ฌ์ฉํ ์ ์๋ ๋ฐ์ดํฐ์ ๊ฐ์๋ ํ์ ์ ์ด๋ผ๋ ์ ์ด ๋ง์ ์ ์ฝ์ ๋ฐ์์ํจ๋ค. ๊ทธ๋์ ์ฐ์ฐ ์๋์ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ์ต๋ํ์ผ๋ก ํ์ฉํ ์ ์๋ ํจ์จ์ ์ธ ์๊ณ ๋ฆฌ์ฆ์ ์์ฑํด์ผ ํ๋ค.
- ๋ค์ด๋๋ฏน ํ๋ก๊ทธ๋๋ฐ์ผ๋ก ํด๊ฒฐํ ์ ์๋ ๋ํ์ ์ธ ์์๋ก ํผ๋ณด๋์น ์์ด์ด ์๋ค. ํผ๋ณด๋์น ์์ด์ ์ด์ ๋ ํญ์ ํฉ์ ํ์ฌ์ ํญ์ผ๋ก ์ค์ ํ๋ ํน์ง์ด ์๋ ์์ด์ด๋ค.
- n๋ฒ์งธ ํผ๋ณด๋์น ์ = (n-1)๋ฒ์งธ ํผ๋ณด๋์น ์ + (n-2)๋ฒ์งธ ํผ๋ณด๋์น ์
- ๋จ, 1๋ฒ์งธ ํผ๋ณด๋์น ์ = 1, 2๋ฒ์งธ ํผ๋ณด๋์น ์ = 1
#ํผ๋ณด๋์น ํจ์๋ฅผ ์ฌ๊ท ํจ์๋ก ํํ def fibo(x): if x == 1 or x == 2: return 1 return fibo(x-1) + fibo(x-2) print(fibo(4)) - ์ด์ฒ๋ผ ํผ๋ณด๋์น ์์ด์ ์ ํ์์ ์ฌ๊ท ํจ์๋ฅผ ์ฌ์ฉํด ๋ง๋ค ์๋ ์์ง๋ง, ๋จ์ํ ๋งค๋ฒ ๊ณ์ฐํ๋๋ก ํ๋ฉด ๋ฌธ์ ๋ฅผ ํจ์จ์ ์ผ๋ก ํด๊ฒฐํ ์ ์๋ค. ์ด๋ฌํ ๋ฌธ์ ๋ ๋ค์ด๋๋ฏน ํ๋ก๊ทธ๋๋ฐ์ ์ฌ์ฉํ๋ฉด ํจ์จ์ ์ผ๋ก ํด๊ฒฐํ ์ ์๋ค. ๋ค์ ๋ ์กฐ๊ฑด์ ๋ง์กฑํ ๋ ์ฌ์ฉํ ์ ์๋ค.
- ํฐ ๋ฌธ์ ๋ฅผ ์์ ๋ฌธ์ ๋ก ๋๋ ์ ์๋ค.
- ์์ ๋ฌธ์ ์์ ๊ตฌํ ์ ๋ต์ ๊ทธ๊ฒ์ ํฌํจํ๋ ํฐ ๋ฌธ์ ์์๋ ๋์ผํ๋ค.
- ๋ฉ๋ชจ์ด์ ์ด์ ์ ๋ค์ด๋๋ฏน ํ๋ก๊ทธ๋๋ฐ์ ๊ตฌํํ๋ ํ ์ข ๋ฅ๋ก, ํ ๋ฒ ๊ตฌํ ๊ฒฐ๊ณผ๋ฅผ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ๋ฉ๋ชจํด๋๊ณ ๊ฐ์ ์์ ๋ค์ ํธ์ถํ๋ฉด ๋ฉ๋ชจํ ๊ฒฐ๊ณผ๋ฅผ ๊ทธ๋๋ก ๊ฐ์ ธ์ค๋ ๊ธฐ๋ฒ์ ์๋ฏธํ๋ค. ๋ฉ๋ชจ์ด์ ์ด์ ์ ๊ฐ์ ์ ์ฅํ๋ ๋ฐฉ๋ฒ์ผ๋ก ์บ์ฑ์ด๋ผ๊ณ ๋ ํ๋ค.
- ๋ฉ๋ชจ์ด์ ์ด์
์ ํ ๋ฒ ๊ตฌํ ์ ๋ณด๋ฅผ ๋ฆฌ์คํธ์ ์ ์ฅํ๋ ์์ผ๋ก ๊ตฌํํ ์ ์๋ค.
#ํ ๋ฒ ๊ณ์ฐ๋ ๊ฒฐ๊ณผ๋ฅผ ๋ฉ๋ชจ์ด์ ์ด์ ํ๊ธฐ ์ํ ๋ฆฌ์คํธ ์ด๊ธฐํ d= [0] * 100 def fibo(x): #์ข ๋ฃ ์กฐ๊ฑด (1 ํน์ 2์ผ ๋ 1์ ๋ฐํ) if x == 1 or x ==2: return 1 #์ด๋ฏธ ๊ณ์ฐํ ์ ์๋ ๋ฌธ์ ๋ผ๋ฉด ๊ทธ๋๋ก ๋ฐํ if d[x] != 0: return d[x] #์์ง ๊ณ์ฐํ์ง ์์ ๋ฌธ์ ๋ผ๋ฉด ์ ํ์์ ๋ฐ๋ผ์ ํผ๋ณด๋์น ๊ฒฐ๊ณผ ๋ฐํ d[x] = fibo(x-1) + fibo(x-2) return d[x] print(fibo(99)) - ์ ๋ฆฌํ์๋ฉด ๋ค์ด๋๋ฏน ํ๋ก๊ทธ๋๋ฐ์ด๋ ํฐ ๋ฌธ์ ๋ฅผ ์๊ฒ ๋๋๊ณ , ๊ฐ์ ๋ฌธ์ ๋ผ๋ฉด ํ ๋ฒ์ฉ๋ง ํ์ด ๋ฌธ์ ๋ฅผ ํจ์จ์ ์ผ๋ก ํด๊ฒฐํ๋ ์๊ณ ๋ฆฌ์ฆ ๊ธฐ๋ฒ์ด๋ค.
- ์ฌ๊ทํจ์๋ฅผ ์ด์ฉํ์ฌ ๋ค์ด๋๋ฏน ํ๋ก๊ทธ๋๋ฐ ์์ค๋ฅผ ์์ฑํ๋ ๋ฐฉ๋ฒ์, ํฐ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ์์ ๋ฌธ์ ๋ฅผ ํธ์ถํ๋ค๊ณ ํ์ฌ ํ๋ค์ด(Top-Down) ๋ฐฉ์์ด๋ผ๊ณ ๋งํ๋ค.
d= [0] * 100 def pibo(x): print('f(' + str(x) + ')', end=' ') if x==1 or x==2: return 1 if d[x]!=0: return d[x] d[x] = pibo(x-1) + pibo(x-2) return d[x] print(6) - ๋ฐ๋ฉด์ ๋จ์ํ ๋ฐ๋ณต๋ฌธ์ ์ด์ฉํ์ฌ ์์ค์ฝ๋๋ฅผ ์์ฑํ๋ ๊ฒฝ์ฐ ์์ ๋ฌธ์ ๋ถํฐ ์ฐจ๊ทผ์ฐจ๊ทผ ๋ต์ ๋์ถํ๋ค๊ณ ํ์ฌ ๋ณดํ
์
(Bottom-Up)๋ฐฉ์์ด๋ผ๊ณ ๋งํ๋ค.
d = [0]*100 d[1]=1 d[2]=2 n=99 for i in range(3, n+1): d[i]= d[i-1] + d[i-2] print(d[n])
/
dynamic_programming
/Folders and files
| Name | Name | Last commit date | |
|---|---|---|---|
parent directory.. | |||
ย | ย | ||
ย | ย | ||
ย | ย | ||
ย | ย | ||
ย | ย | ||
ย | ย | ||