๋์ ๊ณํ๋ฒ
์ฃผ์ด์ง ๋ฌธ์ ๋ฅผ ์ฌ๋ฌ ๊ฐ์ ์๋ฌธ์ ๋ก ๋ถํ ํ์ฌ ๊ฐ ์๋ฌธ์ ์ ํด๊ฒฐ์์ ๋ฐํ์ผ๋ก ์ฃผ์ด์ง ๋ฌธ์ ๋ฅผ ํด๊ฒฐ, ์ด๋ ๊ฐ ์๋ฌธ์ ๋ ๋ค์ ๋ ์ฌ๋ฌ ๊ฐ์ ์๋ฌธ์ ๋ก ๋ถํ ๊ฐ๋ฅํ๋ค. ๊ฐ ์๋ฌธ์ ๋ ์๋ ์ฃผ์ด์ง ๋ฌธ์ ์ ๋์ผํ ๋ฌธ์ ์ด์ง๋ง ์ ๋ ฅ์ ํฌ๊ธฐ๊ฐ ์๋ค.
์ฌ๋ฌ ๊ฐ์ ์๋ฌธ์ ๋ก ๋ถํ ํ์ฌ...??? ์??
DP๋ฅผ ์ฒ์ ๊ณต๋ถํ์ ๋ค๋ฉด ์ด๊ฒ ๋ฌด์จ ๋ง์ด์ง? ์ดํด๊ฐ ์ ์ ๊ฐ์ค ์ ์์ผ์ค ํ ๋ฐ์. ๊ทธ๋์ ํ๋์ ์ข์ ์์๊ฐ ์์ต๋๋ค ใ ใ
๋ฐ๋ก ํผ๋ณด๋์น ์์ด์ธ๋ฐ์. ํผ๋ณด๋์น ์๋ 1, 1, 2, 3, 5, 8... ๋ก ๋ค์๊ณผ ๊ฐ์ ์ ํ์์ผ๋ก ๋ํ๋ผ ์ ์์ต๋๋ค.
์ด์ ์ด๋ฐ ํผ๋ณด๋์น ์์ด์ ๋ค์๊ณผ ๊ฐ์ด ๋ถํดํด์ ํธ๋ฆฌ ํํ๋ก ๋ํ๋ด ๋ณด๋ฉด, ์๋ฌธ์ ๊ฐ ์์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ์ฌ์ฉ๋๋ ๊ฒ์ ๋ณผ ์ ์์ต๋๋ค. ์ด ๋ง์ด ์ฆ, ์์์ ์ค๋ช ํ "์ฌ๋ฌ ๊ฐ์ ์๋ฌธ์ ๋ก ๋ถํ ํ์ฌ ๊ฐ ์๋ฌธ์ ์ ํด๊ฒฐ์์ ๋ฐํ์ผ๋ก ์ฃผ์ด์ง ๋ฌธ์ ๋ฅผ ํด๊ฒฐ" ๋ถ๋ถ์ด๋ผ ํ ์ ์์ต๋๋ค.
๋ค๋ง ํ๊ฐ์ง ๋ฌธ์ ์ ์ด ์๋๋ฐ์. ์๋ฌธ์ ์ ๊ฒฐ๊ณผ๊ฐ ์์๋ฌธ์ ์ ๊ฒฐ๊ณผ๋ฅผ ์ฐพ๋ ๋ฐ ์ฌ์ฉ๋จ์ผ๋ก ๊ฐ๊ฐ์ ์๋ฌธ์ ๋ ์ค๋ณต๋ ์๊ฐ ์์ต๋๋ค. ์ด๋ ๊ฒ ๋๋ฉด ๊ฐ์ ์๋ฌธ์ ๋ฅผ ์ฌ๋ฌ ๋ฒ ๋ฐ๋ณตํด ๊ณ์ฐํ๋ค ๋ณด๋ ์์๋ญ๋น๊ฐ ์ฌํ๊ฒ ์ฃ ? ๋น์ฐํ ์๊ฐ๋ ๋ ๊ฑธ๋ฆฌ๊ตฌ์.
๊ทธ๋์ ๋์ ๊ณํ๋ฒ์ ์๋ฌธ์ ์ ํด๋ฅผ ๋ฐ๋ก ์ ์ฅํด๋๊ณ ์ด๋ฅผ ๋ ํฐ ๋ฌธ์ ๋ฅผ ํธ๋๋ฐ ์ด์ฉํฉ๋๋ค. ํ ๋ฒ ํผ ๋ฌธ์ ๋ ๋ค์ ํ์ง ์๊ณ ์ ์ฅํด๋ ๊ฐ์ ์ฌ์ฉํจ์ผ๋ก์จ ์์ ์ ์ฝ๊ณผ ์๊ฐ ์ ์ฝ์ ํ๋ ๊ฑฐ์ฃ ใ ใ
์ฐธ๊ณ ๋ก ๋ถํ ์ ๋ณต, ํ์๋ฒ๊ณผ์ ์ฐจ์ด๋ฅผ ์ ๊น ์ง๊ณ ๋์ด๊ฐ์๋ฉด,
๋ถํ ์ ๋ณต์ ๊ฒฝ์ฐ ์๋ฌธ์ ๊ฐ ๋ ๋ฆฝ์ ์ด๊ณ , ๋์ ๊ณํ๋ฒ์ ์๋ฌธ์ ๊ฐ ๋ ๋ฆฝ์ ์ด์ง ์์ต๋๋ค. ๋ํ์ ์ธ ๋ถํ ์ ๋ณต ๋ฐฉ๋ฒ์ ์ฌ์ฉํ ํต ์ ๋ ฌ, ๋ณํฉ ์ ๋ ฌ์ ๋ ์ฌ๋ ค ๋ณด์ธ์. ๊ฐ๊ฐ ๋ถํ ํ๋ ์์๋ค์ด ์ ๋ ฌ ๊ณผ์ ์์ ๋ค๋ฅธ ์์์ ์ํฅ์ ๋ผ์น๊ฑฐ๋ ๊ทธ๋ฐ๊ฒ ์๋์์์?
ํ์ง๋ง ํผ๋ณด๋์น ์์ด๋ง ๋ณด๋๋ผ๋ ๋์ ๊ณํ๋ฒ ์ ์ฉ์ด ๊ฐ๋ฅํ ๋ฌธ์ ๋ ์๋ฌธ์ ๊ฐ ์์ ๋ฌธ์ ์ ์ฌ์ฉ๋จ์ผ๋ก ์ํฅ์ ๋ผ์น๊ฒ ๋ฉ๋๋ค. ์ฆ ๋ ๋ฆฝ์ ์ด์ง ์๋ค๋ ๊ฒ์ด์ฃ .
๋์ ๊ณํ๋ฒ๊ณผ ํ์๋ฒ๊ณผ์ ์ฐจ์ด๋ ํ์๋ฒ์ ๊ฒฝ์ฐ ๊ฐ ๋จ๊ณ๋ณ๋ก ํ์ฌ ์ํ์์ ๊ฐ์ฅ ์ต์ ์ ๊ฒฝ์ฐ๋ฅผ ํ๋จํด์ ๊ฒฐ์ ํ๊ธฐ ๋๋ฌธ์, ๋ฌธ์ ์ ๋ฐ๋ผ ์ต์ ํด๋ฅผ ๊ตฌํ ์๋ ๊ทธ๋ ์ง ์์ ์๋ ์์ต๋๋ค. ํ์ง๋ง ๋์ ๊ณํ๋ฒ์ ๊ฒฝ์ฐ ๋ชจ๋ ๊ฐ๋ฅ์ฑ์ ๊ณ ๋ คํ๋ฏ๋ก ์ด๋ค ๋ฌธ์ ๋ ํญ์ ์ต์ ์ ๊ฒฐ๊ณผ๊ฐ ๋์ถ๋ฉ๋๋ค.
๋ค์ ๋์์์! ์๊น ๋์ ๊ณํ๋ฒ์ ์๋ฌธ์ ์ ํด๋ฅผ ๋ฐ๋ก ์ ์ฅํด์ ๋์ค์ ๋ค์ ์ฌ์ฉํ๋ค๊ณ ํ๋๋ฐ์. ์ด๋ ๊ฒ ์ค๋ณต ์ฐ์ฐ์ ๋ฐฉ์งํ๋ ๋ฐฉ๋ฒ์๋ ๋ ๊ฐ์ง ๋ฐฉ๋ฒ์ด ์์ต๋๋ค.
1. ๋ฉ๋ชจ์ด์ ์ด์ (ํํฅ์)
ํํฅ์(Top-Down)์ ํ์ ๋ฌธ์ ์ ๋ํ ์ ๋ต์ ๊ณ์ฐํ๋์ง ํ์ธํด๊ฐ๋ฉฐ ๋ฌธ์ ๋ฅผ ์์ฐ์ค๋ฌ์ด ๋ฐฉ์์ผ๋ก ํ์ด ๋๊ฐ๋ ๋ฐฉ๋ฒ์ ๋๋ค. ํํ ๋ฉ๋ชจ์ด์ ์ด์ ์ด๋ผ๊ณ ๋ถ๋ฆ ๋๋ค.
# DP
# memoization (ํํฅ์)
dp = [0]*100 # ์๋ฌธ์ ๊ฒฐ๊ณผ๋ฅผ ์ ์ฅํ ๋ฆฌ์คํธ
dp[0] = 1
dp[1] = 1
def fib(n):
# ๋ง์ฝ ๊ณ์ฐํ ์ ์ด ์๋ค๋ฉด ์ฌ๊ท๋ก ๊ณ์ฐ
if dp[n] == 0:
dp[n] = fib(n-1) + fib(n-2)
# ์๋ค๋ฉด ๊ทธ๋๋ก ๋ฐํ
return dp[n]
fib(10)
2. ํ๋ทธ๋ ์ด์ (์ํฅ์)
์ํฅ์(Bottom-Up)์ ๋ ์์ ํ์ ๋ฌธ์ ๋ถํฐ ์ดํด๋ณธ ๋ค์ ์์ ๋ฌธ์ ์ ์ ๋ต์ ์ด์ฉํด์ ํฐ ๋ฌธ์ ์ ์ ๋ต์ ํ์ด๋๊ฐ๋ ๋ฐฉ๋ฒ์ ๋๋ค. ํํ ํ๋ทธ๋ ์ด์ ์ด๋ผ๊ณ ๋ถ๋ฆ ๋๋ค.
# DP
# ํ๋ทธ๋ ์ด์
(์ํฅ์)
def fib(n):
dp = [0]*(n+1)
dp[0] = 1
dp[1] = 1
# ์์ ๊ฐ(์๋ฌธ์ )๋ถํฐ ์ง์ ๊ณ์ฐํ๋ฉฐ ์งํ
for i in range(2,n+1):
dp[i] = dp[i-1] + dp[i-2]
return dp[n]
fib(10)
๊ทธ๋ผ ๋์ ๊ณํ๋ฒ์ ์ด๋ค ๋ฌธ์ ์ ์ ์ฉํด์ผ ํ ๊น์?
์ด๋ค ๋ฌธ์ ๋ฅผ ๋ณด๊ณ ์ฐ์ ์ด ๋ฌธ์ ๊ฐ ์ต์ ์ฑ์ ์๋ฆฌ๋ฅผ ๋ง์กฑํ๋์ง ํ๋จํด์ผ ํฉ๋๋ค. ์ฌ๊ธฐ์ ์ต์ ์ฑ์ ์๋ฆฌ๋ ์ฃผ์ด์ง ๋ฌธ์ ์ ๋ถ๋ถํด๊ฐ ์ ์ฒด ๋ฌธ์ ์ ํด๋ฅผ ๊ตฌํ๋๋ฐ ์ฌ์ฉ๋๋์ง๋ฅผ ์๋ฏธํฉ๋๋ค. ๋์ ๊ณํ๋ฒ์ ์๋ฌธ์ ์ ๊ฒฐ๊ณผ๋ฅผ ๋ค๋ฅธ ์๋ฌธ์ ๋ฅผ ํธ๋ ๋ฐ ์ฌ์ฉํ๋๊น ๋น์ฐํ ์๊ธฐ์ฃ ?
๋ง์ฝ ์ต์ ์ฑ์ ์๋ฆฌ๊ฐ ์ ์ฉ๋จ์ ํ์ธํ์ผ๋ฉด ์ฃผ์ด์ง ๋ฌธ์ ๋ฅผ ์๋ฌธ์ ๋ก ๋ถํดํ์ฌ ์ต์ ํด๋ฅผ ์ ๊ณตํ๋ ์ ํ์์ ๋์ถํด์ผ ํฉ๋๋ค. ์ด์ ์ด ์ ํ์์ ์ฝ๋๋ก ์ฎ๊ฒจ ์์ฑํ๋ฉด ๋๋๋ฐ์.
๊ฐ์ฅ ์ดํดํ๊ธฐ ์ฌ์ด ๊ฒ์ด ๋ฌธ์ ๋ฅผ ํ๋ฉด์ ์ดํด๋ณด๋ ๊ฑฐ๋๊น ๋ค๋ฅธ DP๋ฌธ์ ํ๋๋ฅผ ๋ ํ์ด๋ด ์๋ค ใ ใ
Q1. Leetcode (leetcode.com/problems/climbing-stairs/)
๊ณ๋จ์ ์ค๋ฅผ ๋ ํ ์นธ ํน์ ๋ ์นธ์ฉ ์ฌ๋ผ๊ฐ ์ ์๋ค๊ณ ๊ฐ์ ํ์ ๋ ๊ณ๋จ ๊ผญ๋๊ธฐ๊น์ง ์ฌ๋ผ๊ฐ๋ ๋ฐฉ๋ฒ์ ์๋ฅผ ๊ตฌํ๋ ๊ฒ์ด ๋ฌธ์ ์ ๋๋ค.
์ด ๋ฌธ์ ์ ์ ํ์์ ์ด๋ป๊ฒ ๋ ๊น์?
1 ๊ณ๋จ: 1
2 ๊ณ๋จ: 1+1, 2
3 ๊ณ๋จ: 1+1+1, 1+2, 2+1
4 ๊ณ๋จ: 1+1+1+1, 2+2, 2+1+1, 1+1+2, 1+2+1
......
3๊ณ๋จ์ ์ฌ๋ผ๊ฐ ๋๋ 2๊ณ๋จ์ ์ค๋ฅธ ํ 1๊ณ๋จ์ ์ค๋ฅด๊ฑฐ๋ 1๊ณ๋จ์ ์ค๋ฅด๊ณ 2๊ณ๋จ์ ์ค๋ฅด๋ ๊ฒฝ์ฐ๋ฅผ ๋ํด์ฃผ๋ฉด ๋ฉ๋๋ค.
4๊ณ๋จ์ ์ฌ๋ผ๊ฐ๋ ์ญ์ 3๊ณ๋จ์ ์ค๋ฅธ ํ 1๊ณ๋จ์ ์ค๋ฅด๊ฑฐ๋ 2๊ณ๋จ์ ์ค๋ฅด๊ณ 2๊ณ๋จ์ ์ค๋ฅผ ๋์ ๊ฒฝ์ฐ๋ฅผ ๋ํด์ฃผ๋ฉด ๋์ฃ .
์ด์ ์ ๊ตฌํ๋ ๋ถ๋ถํด๋ฅผ ์ ์ฒด ๋ฌธ์ ์ ํด๋ฅผ ๊ตฌํ๋ ๋ฐ ์ฌ์ฉํจ์ผ๋ก ์ต์ ์ฑ์ ์๋ฆฌ๋ฅผ ๋ง์กฑํฉ๋๋ค.
์ด๋ฅผ ์ ํ์์ผ๋ก ๋ํ๋ด๋ฉด, n > 2 ์ผ ๋, C(n) > C(n-1) + c(n-2)๋ก ๋ํ๋ผ ์ ์์ต๋๋ค.
์ฒ์ ๋ ํญ์ด ์ซ์๊ฐ ๋ฌ๋ผ์ ๊ทธ๋ ์ง, ํผ๋ณด๋์น ์ํ๊ณ ์ ํ์์ด ๋๊ฐ์ฃ ?
def climbStairs(n: int) -> int:
c = [0]*(n+1)
c[0] = 1
c[1] = 2
if n < 3:
return c[n-1]
for i in range(2,n):
c[i] = c[i-1] + c[i-2]
return c[n-1]
climbStairs(5)
์ด๋ ๋ฏ ๋ฌธ์ ๋ฅผ ํธ์ค ๋ ์ต์ ์ฑ์ ์๋ฆฌ๋ฅผ ๋ง์กฑํ๋์ง ํ์ธ ํ, ์ ํ์์ ๋์ถํด์ ๋ฌธ์ ๋ฅผ ํธ์๋ฉด ๋ฉ๋๋ค. ์ฌ์ค ํผ๋ณด๋์น ์๋ ๊ณ๋จ ์ค๋ฅด๊ธฐ ๋ฑ์ ๋ฌธ์ ๋ ์ ๋ง ์ฌ์ด ๋ฌธ์ ์ ์ํ๊ณ ๋ค๋ฅธ ๋์ ๊ณํ๋ฒ ๋ฌธ์ ๋ค์ ๊ฒฝ์ฐ ์ ๋ง ์ด๋ ค์ด ๋ฌธ์ ๋ค์ด ๋ง๊ธฐ ๋๋ฌธ์ ๋ค๋ฅธ ๋ฌธ์ ๋ค์ ๋ง์ด ํ์ด๋ณด๋ ๊ฒ์ ์ถ์ฒ๋๋ฆฝ๋๋ค!
'Algorithm๐ค > ์๊ณ ๋ฆฌ์ฆ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์ ํ์๐ฅ์ด ๋์ฒด ๋ญ๊ฐ์? ๊ถ๊ธํด์ !! (0) | 2023.05.15 |
---|---|
์ฌ๊ทํจ์ recursive algorithm ๊ณผ์ (0) | 2023.03.26 |