๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

Programming/Algorithm

[Kotlin] ๋ฐฑ์ค€ 10870 - ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜ 5

728x90
๋ฐ˜์‘ํ˜•

๋ฌธ์ œ

ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜๋Š” 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))
}
728x90
๋ฐ˜์‘ํ˜•