문제
머쓱이는 구슬을 친구들에게 나누어주려고 합니다. 구슬은 모두 다르게 생겼습니다. 머쓱이가 갖고 있는 구슬의 개수 balls와 친구들에게 나누어 줄 구슬 개수 share이 매개변수로 주어질 때, balls개의 구슬 중 share개의 구슬을 고르는 가능한 모든 경우의 수를 return 하는 solution 함수를 완성해주세요.
제한사항
- 1 ≤ balls ≤ 30
- 1 ≤ share ≤ 30
- 구슬을 고르는 순서는 고려하지 않습니다.
- share ≤ balls
입출력 예
코드
class Solution {
fun solution(balls: Int, share: Int): Int {
var answer: Int = 1
var array = Array(balls+1) { IntArray(share+1) }
for(i in 1..balls){
array[i][1] = i
}
for(i in 1..share){
array[i][i] = 1
}
for(i in 2..balls){
for(j in 2..share){
array[i][j] = array[i-1][j-1] + array[i-1][j]
}
}
println(array.contentDeepToString())
answer = array[balls][share]
return answer
}
}
이 문제는 조합으로 푸는 문제인데 팩토리얼로 일일히 푸니까 메모리초과(?)인가가 떴다.
그래서 곰곰히 생각하다가 문득 전에 이와 관련된 문제를 풀었던 적이 있어서 기억을 되살려 풀었다.
일단 nC1 과 같은 경우에는 n 이고, nCn인 경우에는 모두 1이다. 표로 설명하면 아래와 같다.
그 다음 3C2의 값을 구해보면 3인 것을 알 수 있다.
여기서 3은 2C1 + 2C2인 값임을 알 수 있다.
즉, 표로 설명하면 아래와 같다.
마찬가지로 4C2는 계산해보면 (4 * 3) / (2 * 1) = 6 임을 알 수 있고
이는 3C1 + 3C2인 값임을 알 수 있다.
이를 통해 점화식으로 나타내면 nCm = n-1Cm-1 + n-1Cm인 것을 알 수 있다.
https://school.programmers.co.kr/learn/courses/30/lessons/120840
'Algorithm > kotlin' 카테고리의 다른 글
[프로그래머스/Kotlin] 이진 변환 반복하기 (Lv. 2) (0) | 2024.03.27 |
---|---|
[프로그래머스/Kotlin] JadenCase 문자열 만들기 (Lv. 2) (0) | 2024.03.27 |
[프로그래머스/Kotlin] 공 던지기 (Lv. 0) (0) | 2024.02.13 |
[프로그래머스/Kotlin] 이진수 더하기 (Lv. 0) (2) | 2024.02.13 |
[프로그래머스/Kotlin] 컨트롤 제트 (Lv. 0) (0) | 2024.02.13 |