์ต์ ํด๋ฅผ ๊ตฌํ๊ธฐ ์ํด ๋งค์ฐ ๋ง์ ์๊ฐ์ด ํ์ํ ๊ฒฝ์ฐ ์ฐ์ฐ ๊ฒฐ๊ณผ๋ฅผ ์ ์ฅํ์ฌ ์ค๋ณต ์ฐ์ฐ์ ๋ฐฉ์งํจ์ผ๋ก์จ ์๊ฐ ํจ์จ์ฑ์ ๋์ด๋ ๊ธฐ๋ฒ์ ๋งํ๋ค.
๊ฐ๋จํ ๋งํ์๋ฉด ํ ๋ฌธ์ ๋ฅผ ๋ฌด์กฐ๊ฑด ํ ๋ฒ๋ง ํ๋๋ก ๊ฒฐ๊ณผ๋ฅผ ์ ์ฅํด ์ฌ์ฉํ๋ค๋ ๊ฒ์ด๋ค.
- ํฐ ๋ฌธ์ ๋ฅผ ์์ ๋ฌธ์ (ํฐ ๋ฌธ์ ์ ๋ถํ )๋ก ๋๋ ์ ์๋ ๊ฒฝ์ฐ
- ์์ ๋ฌธ์ ์ ํฐ ๋ฌธ์ ์ ํด๊ฒฐ ๋ก์ง์ด ๊ฐ์์ผ ํจ
- ์์ ๋ฌธ์ ์์ ๊ตฌํ ์ ๋ต์ ๊ทธ๊ฒ์ ํฌํจํ๋ ํฐ ๋ฌธ์ ์์๋ ๋์ผ
- ํด๊ฒฐ ๋ก์ง์ด ์์ํจ์(๋์ผ ์ ๋ ฅ์ ๋ฐ๋์ ๋์ผ ์ถ๋ ฅ์ด ๋ณด์ฅ)์ ํด๋นํด์ผ ํจ
์ ์กฐ๊ฑด์ ๋ง์กฑํ๋ ๋ฌธ์ ๋ค์ ์ฐ์ฐ ๊ฒฐ๊ณผ๋ค์ ์์ด์ ํด๋นํ๋ค๊ณ ๋ณผ ์ ์๋ค.
์์ด์ ๊ท์น์ ์ผ๋ก ๋ฐฐ์ด๋ ์ซ์๋ค์ ๋ชจ์์ด๊ธฐ ๋๋ฌธ์ ๋ฐฐ์ด(๋ฆฌ์คํธ)์ ์ ์ฅํ๋ค.
๋ถํ ์ ๋ณต ์๊ณ ๋ฆฌ์ฆ์ด๋ ํต ์ํธ์ ๊ฐ์ด ๋ฌธ์ ๋ฅผ ๋ถํ ํด ํด๊ฒฐํ๋ ๊ธฐ๋ฒ์ ๋งํ๋ค.
๋ค์ด๋๋ฏน ํ๋ก๊ทธ๋๋ฐ๊ณผ ๋ถํ ์ ๋ณต์ ๋ฌธ์ ๋ฅผ ์์ ๋ฌธ์ ๋ก ์ชผ๊ฐ ๋ค๋ ์ ์์๋ ๋์ผํ๋, ๋ถํ ํ์ฌ ํด๊ฒฐ๋ ์์ ๋ฌธ์ ๊ฐ ๋ค๋ฅธ ๋ฌธ์ ์ ํด๊ฒฐ์ ์ํฅ์ ๋ฏธ์น๋ ๋ค์ด๋๋ฏน ํ๋ก๊ทธ๋๋ฐ๊ณผ ๋ฌ๋ฆฌ ๋ถํ ์ ๋ณต์์๋ ํด๊ฒฐ๋ ๋ฌธ์ ๊ฐ ๋ค๋ฅธ ๋ฌธ์ ์ ์ํฅ์ ๋ฏธ์น์ง ์๋๋ค.
ํฐ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ์์ ๋ฌธ์ ๋ฅผ ํธ์ถ
์ฌ๊ท ํจ์์ ๋ฉ๋ชจ์ด์ ์ด์
(์บ์ฑ)์ ์ด์ฉํ๋ค.
MAX = 100
dp = [0] * MAX
def fibonacci(x):
if x == 1 or x == 2:
return 1
if dp[x] != 0:
return d[x]
dp[x] = fibonacci(x - 1) + fibonacci(x - 2)
return dp[x]
print(fibonacci(MAX - 1))๋ฉ๋ชจ์ด์ ์ด์ ์ ์ค๋ณต ๊ณ์ฐ์ ๋ฐฉ์งํ๊ธฐ ์ํด ๊ฐ์ ์ ์ฅํ๋ ๊ฒ์ด๋ฉฐ, ์ ์ฅ๋ ์ฐ์ฐ ๊ฒฐ๊ณผ๋ฅผ ์ฌ์ฉํ์ง ์์ ์๋ ์๋ค.
์ด๋ ๋ค์ด๋๋ฏน ํ๋ก๊ทธ๋๋ฐ๊ณผ๋ ๋ณ๊ฐ์ ๊ธฐ๋ฒ์ผ๋ก ๋ถ๋ฅ๋๋ค. ์ฆ, Top-Down ๋ฐฉ์์ ์๋ฐํ ๋งํ์๋ฉด DP์ ํฌํจ๋์ง๋ ์๋๋ค.
์์ ๋ฌธ์ ๋ถํฐ ์ฐจ๊ทผ์ฐจ๊ทผ ๋ต์ ํธ์ถํด ํฐ ๋ฌธ์ ๋ฅผ ํด๊ฒฐ
๋ฐ๋ณต๋ฌธ๊ณผ DP ํ
์ด๋ธ์ ์ด์ฉํ๋ค.
MAX = 99
dp = [0] * (MAX + 1) # DP ํ
์ด๋ธ
dp[1] = 1
dp[2] = 1
for i in range(3, MAX + 1):
dp[i] = dp[i - 1] + dp[i - 2]
print(dp[MAX])์ ํ์ ์ธ DP๋ Bottom-Up ๋ฐฉ์์ ๋งํ๋ค. ์์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ณ , ์ด๋ก๋ถํฐ ๋์ถ๋ ๊ฐ์ ํตํด ํฐ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๋ฐฉ์์ด๋ค.
- ๋ฌธ์ ๋ฅผ
๋ถํํด์ ํด๊ฒฐํ ์ ์๊ณ , ์ด๋ ๊ฒ ํด๊ฒฐํ ๋ฌธ์ ์ ์ผ๋ถ๋ถ์ด ๋ค๋ฅธ ์ผ๋ถ๋ถ์ ํด๊ฒฐ์ ์ํฅ์ ๋ฏธ์น๋ค๋ฉด ์ฌ๊ธฐ์์๊ท์น์ฑ์ ์ฐพ์ ์์ด๋ก ๋ํ๋ผ ์ ์๋ค. - ์ด๋ ๊ฒ ์์ด๋ก ๋ํ๋ธ๋ค๋ฉด ๊ฐ์ฅ ์์ ์๋ถํฐ ์ฐจ๋ก๋๋ก ์ฑ์๋๊ฐ๋ Bottom-Up ๋ฐฉ์์ ์ ์ฉํด ๋ค์ด๋๋ฏน ํ๋ก๊ทธ๋๋ฐ ๋ฌธ์ ๋ก ๋ณํํ ์ ์๋ค.
๊ตฌํ๋ฌธ์ ์์๋ ๋ก์ง์ ์์ํํ๋ ๋ฌธ์ ๊ฐ ๋ง์๊ตฌํ + DP๋ฌธ์ ๊ฐ ๋ง์ ๊ฒ ๊ฐ๋ค.