본문 바로가기
알고리즘 문제 풀이/백준

백준 11050 이항 계수 1 Kotlin (재귀)

by 옹구스투스 2022. 1. 16.
반응형

문제 출처 : https://www.acmicpc.net/problem/11050

 

11050번: 이항 계수 1

첫째 줄에 \(N\)과 \(K\)가 주어진다. (1 ≤ \(N\) ≤ 10, 0 ≤ \(K\) ≤ \(N\))

www.acmicpc.net

 
 

풀이

간단한 재귀 문제이다.

문제는, nCm을 구하는 건데, nCm = n! / (n-m)! / m!이다.

본인은 makeFacto 함수로 미리 1부터 n까지의 팩토리얼 값을 구해놓고 사용했다.

코드의 핵심은 makeFacto의 리턴 부분 .also이다.

코틀린에선 c++와 달리 return facto[n] = n*makeFacto(n-1)이 안 되니

return (n*makeFacto(n-1)).also{facto[n] = it}로 사용해준다. 

코드

val br = System.`in`.bufferedReader()
val facto = IntArray(11){1}

fun makeFacto(n : Int) : Int{
    if(n==1){
        return 1
    }
    return (n*makeFacto(n-1)).also{ facto[n] = it }
}


fun main() = with(System.out.bufferedWriter()){
    val (n ,m) = br.readLine().split(' ').map{it.toInt()}
    facto[1]=1
    makeFacto(n)
    write("${facto[n]/facto[n-m]/facto[m]}")
    close()
}

 

반응형

댓글