[Kotlin] ๋ฐฑ์ค 10870 - ํผ๋ณด๋์น ์ 5
๋ฌธ์
ํผ๋ณด๋์น ์๋ 0๊ณผ 1๋ก ์์ํ๋ค. 0๋ฒ์งธ ํผ๋ณด๋์น ์๋ 0์ด๊ณ , 1๋ฒ์งธ ํผ๋ณด๋์น ์๋ 1์ด๋ค. ๊ทธ ๋ค์ 2๋ฒ์งธ ๋ถํฐ๋ ๋ฐ๋ก ์ ๋ ํผ๋ณด๋์น ์์ ํฉ์ด ๋๋ค.
์ด๋ฅผ ์์ผ๋ก ์จ๋ณด๋ฉด Fn = Fn-1 + Fn-2 (n ≥ 2)๊ฐ ๋๋ค.
n=17์ผ๋ ๊น์ง ํผ๋ณด๋์น ์๋ฅผ ์จ๋ณด๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.
0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597
n์ด ์ฃผ์ด์ก์ ๋, n๋ฒ์งธ ํผ๋ณด๋์น ์๋ฅผ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
์ฒซ์งธ ์ค์ n์ด ์ฃผ์ด์ง๋ค. n์ 20๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ ์์ฐ์ ๋๋ 0์ด๋ค.
ํ์ด
1. n๋ฒ์งธ ์๋ฆฌ์ ๊ฐ์ n-1๋ฒ์งธ, n-2๋ฒ์งธ ๊ฐ์ ํฉ์ด๋ค. -> n-1, n-2๋ฒ์งธ ๊ฐ์ ๊ธฐ์ตํ๊ณ ์์ด์ผํ๋ค. -> ๋ฐฐ์ด ์๋ฃ๊ตฌ์กฐ๋ฅผ ์ฑํํด์ ๊ฐ์ ์ ์ฅํด ๋๋๋ค.
2. n < 20์ ์กฐ๊ฑด -> 0๋ถํฐ n๊น์ง ๋ชจ๋ ๋ณด์๋ ์ถฉ๋ถํ ์์ ๊ฐ, ์๊ฐ๋ณต์ก๋ O(n) ์ด๋ฏ๋ก ํ๋์ฉ ๋ณด๋ ๋ฐฉ์์ ์ฑํํ๋ค.
3. n์ด 0๊ณผ 1์ ๊ฒฝ์ฐ๋ ์์ธ์ฒ๋ฆฌํ๋ค.
์ฝ๋
import java.util.*
fun main() = with(Scanner(System.`in`)) {
val n: Int = nextInt()
val N: ArrayList<Int> = ArrayList<Int>()
for(i in 0..n){
if(i == 0){
N.add(0)
} else if(i == 1){
N.add(1)
} else {
N.add(N.get(i-1) + N.get(i-2))
}
}
println(N.get(n))
}