Solution (DP)
# λ§€λ² 1κ³λ¨, 2κ³λ¨ μ¬λΌκ° μ μμ
# μ μκΉμ§ μ¬λΌκ° μ μλ λ°©λ²μ λͺ κ°μ§μΈμ§ ꡬνμ!
class Solution:
# DP λ°©μ
# μκ° λ³΅μ‘λ: O(N)
# Runtime: 31ms
# Beats: 66.32%
def climbStairs(self, n: int) -> int:
# μ€μ λ‘ nμ 1, 2, 3, 4, 5 μ μ κ³ νλμ© κ²½μ°μ μλ₯Ό μΈλ³΄μ
# 1: 1, 2: 2, 3: 3(2 + 1), 4: 5(2 + 3), 5: 8(3 + 5)
# κ·ΈλΌ μμ κ°μ΄ 무μΈκ°μ κ·μΉμ΄ μκΉ -> μ΄λ₯Ό μλμ κ°μ΄ dpμ "μ νμ"μΌλ‘ ννν μ μμ
# f(n) = f(n - 1) + f(n - 2)
# 첫λ²μ§Έ κ³λ¨μ κ²½μ°μ μμ λλ²μ§Έ κ³λ¨μ κ²½μ°μ μλ₯Ό λμ
λ리μ μ μ₯ (μ νμμΌλ‘ μ¨μ€μΌ νλ 2κ°)
f = dict()
f[1] = 1
f[2] = 2
# μ νμμμ forλ¬Έμ λ³΄ν΅ 3λΆν° μμνκ³ nκΉμ§μ λ°λ³΅λ¬ΈμΌλ‘ λ§λ€μ΄μ€
# 3λ²μ§Έ κ³λ¨λΆν° μΆλ°νκ³ , μ νμμ΄ n - 2λΆν° nκΉμ§λκΉ
for i in range(3, n + 1):
f[i] = f[i - 1] + f[i - 2]
return f[n]
Solution (Memorization)
class Solution:
# Memorization λ°©μ (dpμ²λΌ λͺ¨λ κ³λ¨μ μλ₯Ό λ€ κ΅¬ν νμκ° μ¬μ€ μμ)
# κ·ΈλκΉ dp λ°©μμμλ forλ¬ΈμΌλ‘ μ 체μ κ³λ¨μ λ€ λ λ€μμ κ²°μ μ νλκΉ
# μ΄ λ°©μμμλ λ°©λ² μκ° κ΅¬ν΄μ§λ©΄ κ·Έ μμ μλ κ³λ¨μ κ³μ°ν νμκ° μλ κ±°μ§
# μκ° λ³΅μ‘λ: O(N)
# Runtime: 31ms
# Beats: 66.32%
def climbStairs(self, n: int) -> int:
# nμ΄ 1κ³Ό 2μΌ λλ μλμ n - 2 κ°μ΄ μμκ° λλ―λ‘ μ
λ ₯ν nμ΄ κ·Έλλ‘ λ°νλλλ‘ μ²λ¦¬
if n < 3:
return n
# μ΄μ κ³Ό νμ¬λ₯Ό κ°κ° 첫λ²μ§Έ, λλ²μ§Έ κ³λ¨μ κ²½μ°μ μλ‘ μ μ₯
before, current = 1, 2
# μΈλ²μ§Έ κ³λ¨λΆν° ꡬνλ λ‘μ§
# Memorizationμ μ§ννμ¬ νμ¬μ μ΄μ λ³μλ§ κ³μ μ μ₯νμ¬ λλ €μ£Όλ κ±°μ§
# κ·Έλμ n - 2λ²μ§ΈκΉμ§ λμμ£Όλ κ±°κ³
for _ in range(n - 2):
# μ΄λ κ² νλ²μ μμ±νμ§ μμΌλ©΄ μμ λ€λ₯Έ λ‘μ§μ
# λ§μ½ μλ μ²λΌ μμ±νλ€λ©΄
# before = current
# current = before + current
# beforeμ΄ current λ³μλ‘ μ μ₯μ΄ λ ν, currentμ λ μ μ₯μ νκ² λλ κ±°λκΉ
# μμ ν μλͺ»λ λ‘μ§μΌλ‘ λ°λ
before, current = current, before + current
return current
Leave a comment