๋ค์ด๋๋ฏน ํ๋ก๊ทธ๋๋ฐ์ด๋?
ํฐ ๋ฌธ์ ๋ฅผ ์์ ๋ฌธ์ ๋ก ๋๋์ด ํ๊ณ , ์์ ๋ฌธ์ ์ ๋ต์ ์ฌํ์ฉํ๋ ๊ธฐ๋ฒ์ ์๋ฏธํ๋ค.
๋ฉ๋ชจ๋ฆฌ ๋น์ฉ์ ํ์ฉํ์ฌ ์๊ฐ์ ๋น์ฉ์ ์ค์ด๋ ๋ฐฉ์์ด๋ค.
๐ ์กฐ๊ฑด
- ๋ถ๋ถ ๋ฐ๋ณต ๋ฌธ์ : ์์ ๋ฌธ์ ๊ฐ ๋ฐ๋ณต๋๋ ๊ฒฝ์ฐ
- ์ต์ ๋ถ๋ถ ๊ตฌ์กฐ: ๊ฐ์ ๋ฌธ์ ๋ ๊ตฌํ ๋๋ง๋ค ์ ๋ต์ด ๊ฐ์ ๊ฒฝ์ฐ
์์ ๋ฌธ์ ๊ฐ ๋ฐ๋ณต๋๊ณ ๊ทธ ๋ฌธ์ ์ ๋ต์ด ๊ฐ๊ธฐ ๋๋ฌธ์, ๊ตณ์ด ์์ ๋ฌธ์ ์ ๋ํ ๊ณ์ฐ์ ๋ฐ๋ณตํ์ง ์๊ณ ์ด๋ฅผ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅํ์ฌ ํ์ฉํ๋ ๊ฒ์ด๋ค.
Fibonacci ์์ด
DP๋ฅผ ์ค๋ช ํ ๋ ๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ผ๋ก ์๋ฅผ ๋ค ์ ์๋ ๊ฒ์ด Fibonacci ์์ด์ด๋ค. ์ด๋ f(n) = f(n-1) + f(n-2)์ ์ ํ์์ ๊ฐ์ง๋ค.
์๋ Leetcode ๋ฌธ์ ๋ฅผ ์ฌ๊ท ํจ์๋ฅผ ์ด์ฉํ๋ ๋ฐฉ๋ฒ๊ณผ ๋์ ํ๋ก๊ทธ๋๋ฐ์ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ผ๋ก ํ์ด๋ณผ ๊ฒ์ด๋ค.
https://leetcode.com/problems/fibonacci-number/
Fibonacci Number - LeetCode
Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.
leetcode.com
1๏ธโฃ ์ฌ๊ทํจ์ ์ฌ์ฉ
def fib(self, n):
def fibo(n):
if n == 1:
return 1
elif n == 2:
return 1
else:
return fibo(n-1) + fibo(n-2)
return fibo(n)

์ฌ๊ท ํจ์๋ก ํ๊ฒ ๋๋ฉด ๊ฐ๋จํ๊ฒ ํ ์ ์์ง๋ง, ์์ ๊ทธ๋ฆผ์์ ํ์ธํ ์ ์๋ฏ์ด ํธ์ถ๋๋ ํจ์์ ์๊ฐ ๊ธฐํ๊ธ์์ ์ผ๋ก ์ฆ๊ฐํ๋ค.
ํด๋น ์ฝ๋๋ฅผ ์ ์ถํ๊ฒ ๋๋ฉด ์๋์ ๊ฐ์ด Runtime Error๊ฐ ๋ํ๋๋ค. ๐ฅ

2๏ธโฃ ๋์ ํ๋ก๊ทธ๋๋ฐ ์ฌ์ฉ
๐ก ์ด ๋ฌธ์ ๋ฅผ DP๋ก ํ ์ ์์ง ์์๊น? ์์ ์กฐ๊ฑด์ ์๊ฐํด๋ณด์
- ๋ถ๋ถ ๋ฐ๋ณต ๋ฌธ์
fib(7)์ ๊ตฌํ๊ธฐ ์ํด์๋ fib(6)์ fib(5)๊ฐ ํ์ํ๋ค. ๊ทธ๋ฆฌ๊ณ fib(6)์ ๊ตฌํ๊ธฐ ์ํด์๋ fib(5)์ fib(6)์ด ํ์ํ๋ค. ์ด ๊ฒฝ์ฐ ์ดํด๋ณด๋ฉด fib(7)๊ณผ fib(6)์์ fib(5)๊ฐ ๋ฐ๋ณต๋๋ค. ์ฆ, ์์ ๋ฌธ์ ๊ฐ ๋ฐ๋ณต๋๋ ๊ตฌ์กฐ๋ผ๊ณ ๋ณผ ์ ์๋ค. - ์ต์ ๋ถ๋ถ ๊ตฌ์กฐ
fibo ์์ด์ ๊ฒฝ์ฐ 1๋ฒ์งธ/2๋ฒ์งธ ์๋ ๊ฐ๊ฐ 1๋ก ๊ณ ์ ๋์ด ์์ผ๋ฉฐ 3๋ฒ์งธ ์์ด์ ์ธ์ ๋ ๊ฒฐ๊ณผ๊ฐ 2์ด๋ค. ๊ทธ ์ดํ๋ก๋ ์ด์ ์ ๋ ๊ฐ์ ๊ฐ์ ๋ํ์ฌ ๊ณ์ฐํจ์ผ๋ก fibo ์์ด์์ ์ด๋ค ์๋ฅผ ๊ตฌํ ๋๋ ์์ด์ ๊ฐ์ด ๊ฐ๋ค.
๋ฐฉ๋ฒ
- ๋ชจ๋ ์์ ๋ฌธ์ ๋ค์ ํ๋ฒ๋ง ํผ๋ค. ์ด๋ฅผ ์ํด ์ ๋ต์ ๊ตฌํ ์์ ๋ฌธ์ ์ ๊ฒฐ๊ณผ๋ ์ด๋๊ฐ ์ ์ฅํ๋ค.
- ๋ค์ ๊ทธ๋ณด๋ค ํฐ ๋ฌธ์ ๋ฅผ ํ์ด๋๊ฐ ๋ ๋๊ฐ์ ๋ฌธ์ ๊ฐ ๋ํ๋๋ฉด ์์ ์ ์ฅํ ๊ฒฐ๊ณผ ๊ฐ์ ์ด์ฉํ๋ค.
def fib(self, n):
fibo = [None,1,1]
if n < 3:
return fibo[n]
for i in range(3, n+1):
fibo.append(fibo[i-1] + fibo[i-2])
return fibo[n]

Bottom-up๊ณผ Top-down
- Bottom-up
- ์์ ๋ฌธ์ ๋ถํฐ ์ฐจ๊ทผ์ฐจ๊ทผ ๊ตฌํด๋๊ฐ๋ ๋ฐฉ๋ฒ์ด๋ค.
- ์์ค์ ๊ฐ๋
์ฑ์ด ์ ํ๋ ์ ์๋ค.
- Top-down
- ํฐ ๋ฌธ์ ๋ฅผ ํ๋ค๊ฐ ์์ ๋ฌธ์ ๊ฐ ์์ง ํ๋ฆฌ์ง ์์๋ค๋ฉด ๊ทธ๋ ์์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ค. ์ฌ๊ท ํจ์๋ก ๊ตฌํํ๋ ๊ฒฝ์ฐ ๋๋ถ๋ถ Top-down์ด๋ค.
- ์์ค์ ๊ฐ๋ ์ฑ์ด ์ฆ๊ฐํ์ง๋ง, ์์ฑ์ด ์กฐ๊ธ ์ด๋ ต๋ค.
์ฐธ๊ณ
https://galid1.tistory.com/507
https://kyun2da.github.io/2020/01/19/DynamicProgramming/
'Engineering ๐ป > Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [ํ๋ก๊ทธ๋๋จธ์ค/Python] ๊ฒฝ์ฃผ๋ก ๊ฑด์ค (0) | 2022.03.25 |
|---|---|
| [Algorithm] ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ ๊ฐ๋จ ์ ๋ฆฌ์ Python ๊ตฌํ (๋ฒ๋ธ์ ๋ ฌ, ์ ํ์ ๋ ฌ, ํต์ ๋ ฌ, ๋ณํฉ์ ๋ ฌ, ํ์ ๋ ฌ) (0) | 2022.02.21 |
| [์๋ฃ๊ตฌ์กฐ] ํ (Heaps) (0) | 2022.02.05 |
| [์๋ฃ๊ตฌ์กฐ] Binary Search Tree (0) | 2022.02.05 |
| [Leetcode/Python] 5. Longest Palindromic Substring (0) | 2022.01.12 |