[백준/코틀린] 1003번: 피보나치 함수
실버 3
링크
풀이
fibonacci(n) 호출 시 출력되는 0과 1의 개수도 피보나치 수열을 따릅니다.
- 0의 개수 =
fibonacci(n-1)에서의 0 개수 +fibonacci(n-2)에서의 0 개수 - 1의 개수 =
fibonacci(n-1)에서의 1 개수 +fibonacci(n-2)에서의 1 개수
피보나치 수열을 재귀적으로 구현하고, 메모이제이션을 사용하여 중복 계산을 방지합니다.
코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
val fibonacciCache = MutableList(41) { -1 }
fun fibonacci(n: Int): Int {
if (n == -1) return 1
if (fibonacciCache[n] != -1) return fibonacciCache[n]
return when (n) {
0 -> 0
1 -> 1
else -> fibonacci(n - 1) + fibonacci(n - 2)
}.also { fibonacciCache[n] = it }
}
fun main() = repeat(readln().toInt()) {
val n = readln().toInt()
println("${fibonacci(n - 1)} ${fibonacci(n)}")
}
This post is licensed under CC BY 4.0 by the author.