2021. 9. 9. 08:00ใ์ฝ๋ฉ ํ ์คํธ ์ค๋น/์๊ณ ๋ฆฌ์ฆ
์๋ ํ์ธ์? ์ฃผ๋ํ๋ ์ ๋๋ค.
์ค๋์ ์๋ฃ๊ตฌ์กฐ์ ์๊ณ ๋ฆฌ์ฆ์ ์๊ณ ๋ฆฌ์ฆ์์ ๋์ ๊ณํ๋ฒ๊ณผ ๋ถํ ์ ๋ณต์ ๋ํด ๊ณต๋ถ ํด ๋ณด๋๋ก ํ๋ ๊ฒ์ด์์.
์์ค ์ฝ๋์ ๋ํด์ ํ์ธ ํ๊ณ ์ถ์ผ์ ๋ถ๋ค๊ป์๋ ์ฃผ๋ํ๋์ Git hub์ ๊ด์ฌ์ ์ฃผ์ธ์!
๐ ๊ฐ์
๐๋์ ๊ณํ๋ฒ์ด๋?
Dynamic Programming์ ์ค์ฌ์ DP๋ผ๊ณ ๋ง์ด ๋ถ๋ฅธ๋ค๊ณ ํด์!
๋์ ๊ณํ๋ฒ์ ์ ๋ ฅ ํฌ๊ธฐ๊ฐ ์์ ๋ถ๋ถ ๋ฌธ์ ๋ค์ ํด๊ฒฐํ ๋ค, ํด๋น ๋ถ๋ถ ๋ฌธ์ ์ ํด(๋ต)์ ํ์ฉํ์ฌ ๋ณด๋ค ํฐ ํฌ๊ธฐ์ ๋ถ๋ถ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํจ์ผ๋ก, ์ต์ ์ ์ผ๋ก ์ ์ฒด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ์๊ณ ๋ฆฌ์ฆ์ธ ๊ฒ์ด์์.
๋์ ๊ณํ๋ฒ์ ์ํฅ์ ์ ๊ทผ๋ฒ์ผ๋ก, ๊ฐ์ฅ ์ตํ์ ํด๋ต์ ๊ตฌํ ๋ค, ์ด๋ฅผ ์ ์ฅํ๊ณ , ํด๋น ๊ฒฐ๊ณผ๊ฐ์ ์ด์ฉํ์ฌ ์์ ๋ฌธ์ ๋ฅผ ํ์ด๊ฐ๋ ๊ฒ์ด์์.
๋ํ, ๋ฌธ์ ๋ฅผ ์๊ฒ ์ชผ๊ฐค ๋, ๋ถ๋ถ ๋ฌธ์ ๋ ์ค๋ณต์ด ๋๊ธฐ ๋๋ฌธ์ ์ฌํ์ฉ์ด ๊ฐ๋ฅํ๋ต๋๋ค!
- ๋ฌธ์ ์ ์ : ํผ๋ณด๋์น ์์ด
๐ Memoizaion ๊ธฐ๋ฒ ํ์ฉ
- Memoization(๋ฉ๋ชจ์ด์ ์ด์ ) : ํ๋ก๊ทธ๋จ ์คํ ์ ์ด์ ์ ๊ณ์ฐํ ๊ฐ์ ์ ์ฅ. ์ด๋ฅผ ๋ค์ ๊ณ์ฐํ์ง ์๋๋ก ๋ค์ ๊ณ์ฐ์์ ์ด ์ ์ฅํ ๊ฐ์ ํ์ฉํ์ฌ ์ฐ์ฐ์ ํ๋๋ก ํ๋ ๊ฒ์ผ๋ก, ์ ์ฒด ์คํ ์๋๋ฅผ ๋น ๋ฅด๊ฒ ํ๋ ค๊ณ ์ฌ์ฉํ๋ ๊ธฐ์
๐๋ถํ ์ ๋ณต์ด๋?
๋ถํ ์ ๋ณต์ ๋ฌธ์ ๋ฅผ ๋๋ ์ ์์ ๋๊น์ง ๋๋์ด์ ๊ฐ๊ฐ์ ํ๋ฉด์ ๋ค์ ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๋ค์ ํฉ๋ณํ์ฌ ๋ฌธ์ ์ ๋ต์ ์ป๋ ์๊ณ ๋ฆฌ์ฆ์ธ ๊ฒ์ด์์.
ํ์์ ์ ๊ทผ๋ฒ์ผ๋ก, ์์์ ํด๋ต์ ๊ตฌํ๊ธฐ ์ํด, ์๋๋ก ๋ด๋ ค๊ฐ๋ฉด์ ํ์์ ํด๋ต์ ๊ตฌํ๋ ๋ฐฉ์์ด๋๋๋ค.
์ด๊ฒ์ ์ผ๋ฐ์ ์ผ๋ก ์ฌ๊ทํจ์๋ฅผ ํตํด ๊ตฌํํ๋ ๊ฒ์ด์์.
๋ํ, ๋ฌธ์ ๋ฅผ ์๊ฒ ์ชผ๊ฐค ๋, ๋ถ๋ถ ๋ฌธ์ ๋ ์๋ก ์ค๋ณต๋์ง ์๋๋ค๋ ํน์ง์ด ์๋ ๊ฒ์ด์์.
๐๊ณตํต์ ๊ณผ ์ฐจ์ด์
๐ ๊ณตํต์
๋ฌธ์ ๋ฅผ ์๊ฒ ์ชผ๊ฐ์ด ๊ฐ์ฅ ์์ ๋จ์๋ก ๋ถํ ์ํค๋ ์
๐ ์ฐจ์ด์
- ๋์ ๊ณํ๋ฒ
- ๋ถ๋ถ ๋ฌธ์ ๋ ์ค๋ณต๋์ด, ์์ ๋ฌธ์ ํด๊ฒฐ ์ ์ฌํ์ฉ
- Memoization ๊ธฐ๋ฒ ํ์ฉ (๋ถ๋ถ ๋ฌธ์ ์ ํด๋ต์ ์ ์ฅํ์ฌ ์ฌํ์ฉํ๋ ์ต์ ํ ๊ธฐ๋ฒ ์ฌ์ฉ)
- ๋ถํ ์ ๋ณต
- ๋ถ๋ถ ๋ฌธ์ ๋ ์๋ก ์ค๋ณต๋์ง ์์
- Memoization ๊ธฐ๋ฒ ํ์ฉ ํ์ง ์์
๐ ๋์ ๊ณํ๋ฒ ์๊ณ ๋ฆฌ์ฆ ์ดํด
๐ํผ๋ณด๋์น ์์ด์ด๋?
ํผ๋ณด๋์น ์์ด์ ์ฝ๊ฒ ์ค๋ช ํ์๋ฉด ์์ ํญ๊ณผ ๋ค์ ํญ์ ๋ํ์ฌ ๋ค์ ํญ์ ์ ๊ณ , ๊ทธ๊ฒ์ ๋ค์ ์์ ํญ๊ณผ ์์ ์ ํญ์ ๋ํ์ฌ ๋ค์ ์ ์์ ๋ฐ๋ณตํ๋ ๊ฒ์ด์์. ์ด๋ฅผ ๊ณต์์ผ๋ก ํํํ์๋ฉด $F0โ=0, F1โ=1, Fn+2โ=Fn+1โ+Fnโ$ ์ด๋ ๊ฒ ์ ํ์์ผ๋ก ์ ์ํ ์ ์๋ ๊ฒ์ด์์.
๋จผ์ 0๋ฒ์งธ์ 1๋ฒ์งธ๋ ๋ฌด์กฐ๊ฑด 0๊ณผ 1์ด ๋์ค๋ ๊ฒ์ด์์.
๊ทธ๋ฐ ๋ค 2๋ฒ์งธ ๋ถํฐ๋ ์์ ํญ๊ณผ ์์ ์ ์ํญ์ ๋ํ ๋ค ๊ทธ๊ฒ์ ์์ ํญ ๋ค์ ์ ์ด์ฃผ๋ฉด ๋๋ ๊ฒ์ด์์.
์ด๊ฒ์ ํจ์๋ก ํํํด๋ณด๊ณ ์ ํ ๋, fibonacci๋ผ๊ณ ํ๋ค๋ฉด
fibonacci(0):0
fibonacci(1):1
fibonacci(2):1
fibonacci(3):2
fibonacci(4):3
fibonacci(5):5
fibonacci(6):8
fibonacci(7):13
fibonacci(8):21
fibonacci(9):34
์์ ๊ทธ๋ฆผ์ฒ๋ผ ๋ง์ฝ ํจ์์ 6์ด๋ผ๋ ๊ฐ์ ๋ฃ์๋ค๋ฉด ์ด๋ป๊ฒ ๋ ๊น์?
6์ ํจ์(4)์ ํจ์(5)๋ก ์ชผ๊ฐค ์ ์๊ฒ ๋ ๊ฒ์ด๊ณ , ๋ ํจ์(4)๋ ํจ์ (2)์ ํจ์ (3)์ผ๋ก, ์ญ์ญ ์ชผ๊ฐ์ง๊ฒ ๋ ๊ฒ์ด์์.
### recursive Call ํ์ฉ
def fibonacciRec(num):
if num <= 1:
return num
return fibonacciRec(num - 1) + fibonacciRec(num - 2)
print(fibonacciRec(4))
# ๊ฒฐ๊ณผ๊ฐ : 3
๋จผ์ 4๋ฅผ ์ ๋ ฅํ๊ฒ ๋๋ฉด num(4)๋ 1๋ณด๋ค ํฌ๊ธฐ ๋๋ฌธ์ return๋ฌธ์ผ๋ก ๋ฐ๋ก ๊ฐ ๊ฒ์ด์์.
return๋ฌธ์ ์ฌ๊ทํจ์๋ฅผ ํตํด fibonacciRec ํจ์์ num - 1 ์ฆ, 4 - 1์ ํด์ ํธ์ถ์ด ๋๊ณ , ๋, num - 2 ์ฆ, 4 - 2๋ฅผ ํธ์ถํ๊ณ ์๋ต๋๋ค.
์์์ ์ด์ผ๊ธฐ ํ๋ฏ ํจ์(4)๋ฅผ ๋ ๊ฐ๋ก ์ชผ๊ฐ ๊ฒ์ด๊ณ , ํจ์(2)์ ํจ์(3)์ด ํธ์ถ๋๋ฉด์ ์ชผ๊ฐ์ง๋ ๊ฒ์ ๋ณผ ์ ์๋ ๊ฒ์ด์์.
๊ทธ๋ ๊ฒ 3๊ณผ 2๊ฐ ๊ฐ๊ฐ ๋ num์ผ๋ก ๋ค์ด๊ฐ์ ์ชผ๊ฐ์ง๊ธฐ๋ฅผ ๋ฐ๋ณตํ๋ ๊ฒ์ด๋๋๋ค.
๊ทธ๋ฐ ๋ค ๋ฐํ๋ ๋ ์ด ๊ฐ๋ค์ด ๋ํด์ง๋ฉด์ ๊ฐ์ด ๋์ค๊ฒ ๋๋ ๊ฒ์ด์์.
### ๋์ ๊ณํ๋ฒ(Dynamic Programming) ํ์ฉ
def fibonacci_dp(num):
cache = [0 for index in range(num + 1)]
cache[0] = 0
cache[1] = 1
for index in range(2, num + 1):
cache[index] = cache[index - 1] + cache[index - 2]
print(cache)
return cache[num]
print(fibonacci_dp(10))
# ๊ฒฐ๊ณผ๊ฐ : 55
์ข ๋ ๋ณด๊ธฐ ์ฝ๊ฒ ์ฝ๋๋ฅผ ๋ถ์ํ๊ณ ์ ํ๋ค๋ฉด ์ฌ๊ธฐ๋ฅผ ํด๋ฆญํ์ ์ ํด ๋ณด์ค ์ ์๋ต๋๋ค!
'์ฝ๋ฉ ํ ์คํธ ์ค๋น > ์๊ณ ๋ฆฌ์ฆ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์๊ณ ๋ฆฌ์ฆ] Quick Sort (ํต ์ ๋ ฌ) (0) | 2021.09.09 |
---|---|
[์๊ณ ๋ฆฌ์ฆ] ๋ณํฉ ์ ๋ ฌ (merge sort) (0) | 2021.09.09 |
[์๊ณ ๋ฆฌ์ฆ] 02. ์ ํ ์ ๋ ฌ (0) | 2021.09.08 |
[์๊ณ ๋ฆฌ์ฆ] 01. ๋ฒ๋ธ์ ๋ ฌ (0) | 2021.09.07 |
[์๊ณ ๋ฆฌ์ฆ] 00. ์๊ณ ๋ฆฌ์ฆ ์ฐ์ต ๋ฐฉ๋ฒ (0) | 2021.09.06 |