Climbing Staris
DP๋ฌธ์ ์ด๋ค.
1๊ฐ์ ๊ณ๋จ์ ์ค๋ฅด๋ ๋ฐฉ๋ฒ์ ํ๊ฐ์ง,
f(1) = 1
2๊ฐ์ ๊ณ๋จ์ ์ค๋ฅด๋ ๋ฐฉ๋ฒ์ ๋๊ฐ์ง,f(2) = 2
3๊ฐ์ ๊ณ๋จ์ ์ค๋ฅด๋ ๋ฐฉ๋ฒ์,
์ฒ์์ 1๊ฐ์ ๊ณ๋จ์ ์ค๋ฅด๊ณ 2๊ฐ์ ๊ณ๋จ์ ์ค๋ฅด๋ ๊ฒ๊ณผ
์ฒ์์ 2๊ฐ์ ๊ณ๋จ์ ์ค๋ฅด๊ณ 1๊ฐ์ ๊ณ๋จ์ ์ค๋ฅด๋ ๊ฒฝ์ฐ์ ์๋ฅผ ํฉํ๋ฉด ๋๊ธฐ ๋๋ฌธ์,f(3) = f(2) + f(1) = 3
...
๊ฒฐ๊ตญf(n) = f(n-1) + f(n-2)
๋ฅผ ์ด์ฉํ์ฌ DP๋ก ํ๋ฉด ๋๋น.
(์ฌ๊ท๋ก๋ ํ ์ ์์ง๋ง ๊ณ์ฐ๋์ด ๋๋ฌด ๋ง์.. ๊ฑฐ์ ํผ๋ณด๋์น ์์ด ๋ฌธ์ )
memorization์ ์ํด cache๋ผ๋ ๋์ ๋๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ค.
class Solution: cache = {} def climbStairs(self, n: int) -> int: if n < 3: return n else: return self._climbStairs(n - 1) + self._climbStairs(n - 2) def _climbStairs(self, n: int): if n not in self.cache: self.cache[n] = self.climbStairs(n) return self.cache[n]