κ·Έλμ BFSμ DFS 골λ λ¬Έμ λ€μ νμ΄λ³΄λ©΄μ μκ³ λ¦¬μ¦μ΄ μ΄λ€ 건μ§, μ΄λ»κ² νμ©νμ¬ ν΄κ²° ν μ μλμ§ κ°μ μ‘μκ°μ΅λλ€.
μ½ 47μΌκ° DFSμ BFSλ₯Ό ν΄κ²°νμΌλ―λ‘ νλλ§ κ³μν΄μ νλ κ²λ μκ³ λ³΄λ€ λ€μν μκ³ λ¦¬μ¦μ μ νκ³ μ μ€λλΆν°λ DP μκ³ λ¦¬μ¦μ μλλ³΄λ €κ³ ν©λλ€.
Dynamic Programmingμ μ½μμ λλ€.
def dp(N):
if(N==1): return 1
if(N==2): return 1
return dp(N-1) + dp(N-2)
print(dp(10))
μ¬κΈ° νΌλ³΄λμΉ μμ΄μ ꡬνλ μμ΄ μμ΅λλ€.
μ΄λ κ² μ½λ©μ μμ±νκ³ μ€νν΄λ³΄λ©΄
μ΄λ¬ν νμμ κ±°μ³ μ¬κ·μ μΌλ‘ μ€νλκ² μ£ .
κ·Έλ°λ° μ μ€ν νμμ μμΈν λ€μ¬λ€λ³΄λ©΄
dp(8)λ λλ² μ°μ΄κ³
dp(7)λ λλ² μ°μ΄λ ν¨μ¨μ΄ κ΅μ₯ν λ¨μ΄μ§λ€λ μκ°μ΄ λ€μ§ μλμ?
μ€μ λ‘ μ»΄ν¨ν°μμ μ μ½λ μ»΄νμΌμ λλ €λ³΄λ©΄
dp(10)κ°μ κ²½μ°λ 55λ‘ μ λμ€λλ°
dp(50)κ°μ κ²½μ°λ λλ €μ£½μ¬λ μλμ΅λλ€.
κ·Όλ° μ΄κ±΄ λΉμ°ν νμμ λλ€. μ μ½λλλ‘ dp(50)μ ꡬν κ²½μ°μ 1,000,000 μ΄ = μ½ 277μκ° νμλ μ»΄νμΌ κ°μ΄ λμ¬ κ²λλ€.
μ΄λ κ² μΈλͺ¨μλ λλ―Έ μλ£λ€(μ μμμμμ dp(8),dp(7) λ±)μ μ€μ΄κ³ μκ°λ³΅μ‘λλ₯Ό 2μ nμΉμμ O(n)μΌλ‘ νκΈ°μ μ΄κ² μ€μΌ μ μλ μκ³ λ¦¬μ¦μ΄ λ°λ‘ DPμ λ©λͺ¨μ΄μ μ΄μ μ λλ€.
μ½κ² μ€λͺ νλ©΄ μ λλ―Έ μλ£λ€μ λ°°μ΄ νλ λ§λ€μ΄μ μ μ₯νκ³ , λ§μ½μ νμ¬ μ‘°μ¬μ€μΈ Nμ΄ λ°°μ΄ μμ μλ μλ£λΌλ©΄ κ·Έλλ‘ κ°λ€ μ¨λ¨Ήλ λ°©μμ λλ€.
memo = [0] * 100
def dp(N):
if(N==1): return 1
if(N==2): return 1
if(memo[N] != 0): return memo[N]
memo[N] = dp(N-1) + dp(N-2)
return memo[N]
print(dp(55))
μ΄λ° λ°©μμΌλ‘ λ°°μ΄ νλ λ§λ€μ΄μ£Όκ³ λ©λͺ¨κ° λΉμ΄μμ§ μμΌλ©΄ ν΄λΉ λ©λͺ¨λ‘ return ν΄μ€λλ€.
κ·Έλ¦¬κ³ ν¨μλ₯Ό μ€νν λλ§λ€ memoμ nλ²μ§Έ
μΈλ±μ€μ ν΄λΉνλ κ°μ λ£μ΄μ€λλ€.
μ μμ μ€ννλ©΄
μ΄λ°μ©μΌλ‘ μκ°λ³΅μ‘λκ° ν¬κ² μ€μ΄ κΈλ°© μ»΄νμΌ κ°μ λμΆν μ μμ΅λλ€.
1003λ² - νΌλ³΄λμΉ ν¨μ
본격μ μΌλ‘ λ¬Έμ νμ΄λ₯Ό ν΄λ³΄κ² μ΅λλ€.
νΌλ³΄λμΉ μμ΄μμ Nμ νΈμΆν λ 0κ³Ό 1μ΄ κ°κ° λͺλ² λΆλ¬μμ§λμ§ νμλ₯Ό ꡬνλλλ€.
T = int(input())
for _ in range(T):
zero = 0
one = 0
memo = [0]*41
a = int(input())
fib(a)
λ¨Όμ μ μΈμ ν΄μ£Όκ³ λ©λͺ¨μ΄μ μ΄μ μ μν memoμ κΈΈμ΄λ n<41μ΄λ―λ‘ 41λ‘ μ€μ νκ² μ΅λλ€.
if a == 0:
print(1,0)
elif a == 1:
print(0,1)
elif a == 2:
print(1,1)
else:
print(memo[a-1],memo[a])
DPλ μ νμμ μΈμμ£Όλκ² μ μΌ μ€μνλ° μμ κ°μ μμΈμ κ²½μ°κ° μλλ©΄ 1κ³Ό 0μ νΈμΆνμλ₯Ό λ©λͺ¨μ΄μ μ΄μ μ ν΅ν΄ μμλΌ μ μμ΅λλ€.
def fib(N):
if (N == 0):
return 0
if (N == 1):
return 1
if (memo[N] != 0):
return memo[N]
memo[N] = fib(N-1) + fib(N-2)
return memo[N]
λ©λͺ¨μ΄μ μ΄μ μ μ¬μ©νμ¬ λ©λͺ¨μ λ΄κ²¨μμΌλ©΄ return memo[N] νμμΌλ‘ return ν΄μ£Όκ³ λ©λͺ¨μ λ΄κ²¨μμ§ μλ€λ©΄ memo[n]μ fib(n-1) + fib(n-2)λ‘ μ§μ ν΄μ€μλ€.