
์๊ฐ ๋ฐฉ์
์ผ๋จ ์ํ์ ์ผ๋ก ์๊ฐ์ ํด๋ดค๋ค
n = 0, res = 0 ----> [dp์ ์ ์ฅํ ๋๋ 1๋ก ์ ์ฅํจ, ์ค๋ช ์ ๋ฐ์ ์์]
n = 1, res = 1
n = 2, res = 2
n = 3, res = 3
n = 4, res = 5
n = 5, res = 8
์ด๊ฑธ ๋ณด์๋ง์ Fibonacci๊ฐ ๋ ์ฌ๋๋ค
Fibonacci Sequence:
F(n) = F(n-1) + F(n-2)
F(0) = 0, F(1) = 1 -----> base case
ํผ๋ณด๋์น๋ ์ ํ์ ์ธ dp๋ฌธ์ ์ ํ์ด๋ค
๊ทธ๋ฌ๋ฏ๋ก array๋ฅผ ๊ธธ์ด n+1๋งํผ์ผ๋ก ์ก์์ฃผ๊ณ for loop์ผ๋ก ๊ฐ์ ์ ์ฅํด์ฃผ๋ฉด ๋ ๊ฒ ๊ฐ๋ค
๐ป ์์ฑ ์ฝ๋
class Solution:
def climbStairs(self, n: int) -> int:
if n < 2:
return 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]
โญ๏ธ ์ฌ๊ธฐ์ ์ dp[0] = 1์ด๋?
n = 0, dp[0] = 0 ์ด ๋ง๋ ๊ฒ ์๋๊ฐ๋ผ๋ ์๊ฐ์ด ๋ค ์ ์๋ค.
์ด๋ ๊ฒ ์ค์ ํ ์ด์ ๋ ์ฐ๋ฆฌ๊ฐ ๊ณ๋จ์ ๋์ฐฉํ๋ ๊ฑธ์์๊ฐ ์๋๋ผ ๋๋ฌํ ์ ์๋ ๋ฐฉ๋ฒ ๊ฐ์ง์๋ฅผ ๊ตฌํ๋ ๋ฌธ์ ์ด๊ธฐ ๋๋ฌธ์ด๋ค.
0๋ฒ์งธ ๊ณ๋จ์ ๋๋ฌํ ์ ์๋ ๋ฐฉ๋ฒ์ '์๋ฌด๊ฒ๋ ์ ํ๋ ๊ฒ'์ด๋ค.
๊ทธ๋ฌ๋ฏ๋ก '์๋ฌด๊ฒ๋ ์ ํ๋ค'๋ผ๋ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ๊ธฐ์ 1์ด๋ผ๊ณ ์ ์ฅ์ ํด๋๋ ๊ฒ์ด๋ค.
์ ๋ฉ๋์ด ์ ๊ฐ๋ค๋ฉด ๊ทธ๋ฅ ์ด๋ ๊ฒ ์ฝ๋๋ฅผ ์์ฑํด๋ ๋ฌธ์ ๋ ์๋ค
class Solution:
def climbStairs(self, n: int) -> int:
if n < 4:
return n
dp=[0]*(n+1)
dp[2] = 2
dp[3] = 3
for i in range(4, n+1):
dp[i] = dp[i-1]+dp[i-2]
return dp[n]

'์ฝ๋ฉ ํ ์คํธ > leetcode' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| 53. Maximum Subarray (Medium) [Python] (0) | 2024.02.04 |
|---|---|
| 746. Min Cost Climbing Stairs (Easy) [Python] (0) | 2024.02.04 |
| 49. Group Anagrams (Medium) [Python] (0) | 2024.02.03 |
| 1. Two Sum (Easy) [Python] (0) | 2024.02.03 |
| 242. Valid Anagram (Easy) [Python] (0) | 2024.02.03 |