[LeetCode-DP] Climbing Staris

CHOI YUN HOยท2021๋…„ 9์›” 24์ผ
0

๐Ÿ“ƒ ๋ฌธ์ œ ์„ค๋ช…

Climbing Staris

[๋ฌธ์ œ ์ถœ์ฒ˜ : LeetCode]

๐Ÿ‘จโ€๐Ÿ’ป ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•

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]
profile
๊ฐ€์žฌ๊ฐ™์€ ์‚ฌ๋žŒ

0๊ฐœ์˜ ๋Œ“๊ธ€