Dynamic Programming
DP๋ฅผ ์ฌ์ฉํ ์ ์๋ ์กฐ๊ฑด
Problem์ด ๋ ์์ SubProblem์ผ๋ก ์ชผ๊ฐ์ง ์ ์์ด์ผํ๋ค.
SubProblem์ผ๋ก ๊ฒฐ๊ณผ๋ฅผ ๋์ถํ ์ ์์ด์ผํ๋ค.
์ค๋ณต๋ SubProblem์ด ๊ฒน์ณ์ผํ๋ค.
์์) Fibonacci numbers
ํผ๋ณด๋์น ์์ด
์ฌ๊ทํจ์๋ฅผ ์ด์ฉํ ํผ๋ณด๋์น ๊ตฌํ
func fibonacci(_ n: Int) -> Int {
if [0, 1].contains(n) {
return n
}
return fibonacci(n - 1) + fibonacci(n - 2)
}
print(fibonacci(10))
Top down ๋ฐฉ์์ DP
var fiboArray = [0, 1]
func fibonacci(_ n: Int) -> Int {
if fiboArray.count > n {
return fiboArray[n]
}
let fibo = fibonacci(n-1) + fibonacci(n-2)
fiboArray.append(fibo)
return fibo
}
print(fibonacci(10))
Bottom up ๋ฐฉ์์ DP
func fibonacci(_ n: Int) -> Int {
if [0, 1].contains(n) {
return n
}
var fiboArray = [0, 1]
for i in 2...n {
fiboArray.append(fiboArray[i-1] + fiboArray[i-2])
}
return fiboArray[n]
}
print(fibonacci(10))
Last updated