본문 바로가기
스터디(beakjoon)

Kotlin] 백준 1003번 문제풀이

by 김마리님 2023. 1. 17.

https://www.acmicpc.net/problem/1003

 

1003번: 피보나치 함수

각 테스트 케이스마다 0이 출력되는 횟수와 1이 출력되는 횟수를 공백으로 구분해서 출력한다.

www.acmicpc.net

 

풀이

더보기

0이면 (1 0)

1이면 (0 1) 

2부터 0 + 1 => (1 1)

3이면 1 + 2 => 1 + 1 + 0 => (1 2)

4이면 3 + 2 => 2 + 1 + 1 + 0 => 1 + 0 + 1 + 1 + 0 => (2 3)

 

이 규칙을 보면 이전의 0, 1값과 전전의 0, 1값을 더하면 해당 결과가 나온다.

즉, 변수에 전값과 전전값을 저장해놓고 더하고, 반복문이 반복되는 동안 변수를 업데이트 하면서 마지막 값에 결과를 도출한다.

import java.io.BufferedReader
import java.io.InputStreamReader

fun main(args: Array<String>) {
    question1003()
}

fun question1003() {

    var reader = BufferedReader(InputStreamReader(System.`in`))
    var case = reader.readLine().toInt()

    var previous0 = 0;
    var previous1 = 0;
    var result0 = 0;
    var result1 = 0;

    for(i in 1 .. case){
        var testCase = reader.readLine().toInt()
        for(i in 0 .. testCase) {
            if(i == 0) {
                result0 = 1
                result1 = 0
            } else if(i == 1) {
                previous0 = result0
                previous1 = result1
                result0 = 0
                result1 = 1
            } else {
                var beforeResult0 = result0
                var beforeResult1 = result1
                
                result0 += previous0
                result1 += previous1

                previous0 = beforeResult0
                previous1 = beforeResult1
            }

            if(i == testCase) {
                println("$result0 $result1")
            }
        }
    }
}
반응형