n
계단을 올라야 한다.
class Solution:
def climbStairs(self, n: int) -> int:
if n == 1:
return 1
if n == 2:
return 2
return self.climbStairs(n - 1) + self.climbStairs(n - 2)
언뜻 생각해보면 풀이가 쉽지 않다. 모든 경우의 수를 다 찾아야 한다니 상당히 풀기 어려워 보인다.
다음 그림과 같이 경우의 수를 하나씩 그려보면 기본적으로 피보나치 수와 동일한 유형의 문제다.
class Solution:
dp = collections.defaultdict(int)
def climbStairs(self, n: int) -> int:
if n <= 2:
return n
if self.dp[n]:
return self.dp[n]
self.dp[n] = self.climbStairs(n - 1) + self.climbStairs(n - 2)
return self.dp[n]
이 풀이의 전체 코드를 살펴보면, 피보나치 수와는 초깃값만 약간 다를 뿐 메모이제이션으로 풀이하는 방식은 동일하다.