[Lv. 0] 구슬을 나누는 경우의 수프로그래머스/Level 02023. 4. 12. 15:01
Table of Contents
문제 출처 : https://school.programmers.co.kr/learn/courses/30/lessons/120840
난이도 : Level.0
언어 : Kotlin
문제 설명 :
머쓱이는 구슬을 친구들에게 나누어주려고 합니다. 구슬은 모두 다르게 생겼습니다. 머쓱이가 갖고 있는 구슬의 개수 balls와 친구들에게 나누어 줄 구슬 개수 share이 매개변수로 주어질 때, balls개의 구슬 중 share개의 구슬을 고르는 가능한 모든 경우의 수를 return 하는 solution 함수를 완성해주세요.
제한 사항 :
- 1 ≤ balls ≤ 30
- 1 ≤ share ≤ 30
- 구슬을 고르는 순서는 고려하지 않습니다.
- share ≤ balls
입출력 예 :
balls | share | result |
3 | 2 | 3 |
5 | 3 | 10 |
풀이 :
import Factorial.factorial
import java.math.BigInteger
class Solution {
fun solution(balls: Int, share: Int): BigInteger {
val factorial: (Int) -> BigInteger by lazy { {n: Int -> if (n <= 1) n.toBigInteger() else n.toBigInteger() * factorial(n - 1)} }
return factorial(balls) / (factorial((balls - share)) * factorial(share))
}
}
object Factorial {
lateinit var factorial: (n: Int) -> BigInteger
init {
factorial = { n -> if (n <= 1) n.toBigInteger() else n.toBigInteger() * factorial(n - 1) }
}
}
풀긴 풀었는데 런타임 에러 때문에 통과하지 못했다.
나머지는 전부 통과했으나, 런타임 에러가 발생한 부분은 테스트 케이스 2, 3, 24.
따라서 다른 사람의 풀이를 보았다.
다른 사람의 풀이 :
class Solution {
tailrec fun solution(balls: Int, share: Int): Int = combination(balls, share)
private fun combination(n: Int, r: Int): Int {
return if (r == 0 || n == r) 1
else combination(n - 1, r - 1) + combination(n - 1, r)
}
}
'프로그래머스 > Level 0' 카테고리의 다른 글
[Lv. 0] 모스부호 (1) (0) | 2023.04.13 |
---|---|
[Lv. 0] 가위 바위 보 (0) | 2023.04.12 |
[Lv. 0] 점의 위치 구하기 (0) | 2023.04.12 |
[Lv. 0] 2차원으로 만들기 (0) | 2023.04.11 |
[Lv. 0] 공 던지기 (0) | 2023.04.11 |
@스몰스테핑 :: 작은 발걸음
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!