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