1. 재귀 구조 브루트 포스
func fib(_ n: Int) -> Int {
if n <= 1 { return n }
return fib(n - 1) + fib(n - 2)
}
2. 탑다운(메모이제이션)
var dp = [Int: Int]()
func fib(_ n: Int) -> Int {
if n <= 1 { return n }
if dp[n] != nil {
return dp[n]!
}
dp[n] = fib(n - 1) + fib(n - 2)
return dp[n]!
}
3. 바텀업(타뷸레이션)
func fib(_ n: Int) -> Int {
if n <= 1 { return n }
var dp = Array(repeating: 0, count: n + 1)
dp[1] = 1
for i in 2...n {
dp[i] = dp[i - 1] + dp[i - 2]
}
return dp[n]
}
4. 두 변수만 이용해 공간 절약
func fib(_ n: Int) -> Int {
var x = 0, y = 1
for _ in 0..<n {
let temp = x
x = y
y = temp + y
}
return x
}
'알고리즘' 카테고리의 다른 글
[Swift] 프로그래머스 - 카카오 캐시 (0) | 2022.02.28 |
---|---|
[Swift] 프로그래머스 - 카카오 다트 게임 (0) | 2022.02.28 |
[Swift] LeetCode - 134. Gas Station (0) | 2022.02.28 |
[Swift] LeetCode - 136. Single Number (0) | 2022.02.17 |
[Swift] LeetCode - 1038. Binary Search Tree to Greater Sum Tree (0) | 2022.02.17 |
댓글