머쓱이는 구슬을 친구들에게 나누어주려고 합니다. 구슬은 모두 다르게 생겼습니다. 머쓱이가 갖고 있는 구슬의 개수balls와 친구들에게 나누어 줄 구슬 개수share이 매개변수로 주어질 때,balls개의 구슬 중share개의 구슬을 고르는 가능한 모든 경우의 수를 return 하는 solution 함수를 완성해주세요.
제한사항
1 ≤balls≤ 30
1 ≤share≤ 30
구슬을 고르는 순서는 고려하지 않습니다.
share≤balls
입출력 예 설명
입출력 예 #1
서로 다른 구슬 3개 중 2개를 고르는 경우의 수는 3입니다.
입출력 예 #2
서로 다른 구슬 5개 중 3개를 고르는 경우의 수는 10입니다.
Hint
서로 다른 n개 중 m개를 뽑는 경우의 수 공식은 다음과 같습니다.
자바 풀이
class Solution {
public int solution(int balls, int share) {
if (balls == share || share==0) return 1;
return solution(balls-1, share-1)+solution(balls-1,share);
}
}
조합 (Combination)
nCr : n 개 중 r 개를 순서에 상관없이 선택하는 방법의 수
학생때 확률통계하면서 배웠던게 기억난다.
n 값이 주어지면 1부터 n 까지 곱을 해야하는데 for문을 사용하게 되면 중첩을 해야 해서 재귀함수를 사용했다.
(뭔가 그리고 살짝,, 멋지게 풀고 싶었다. )
재귀함수
재귀함수는 정의 단계에서 자기 자신을 재참조 하는 함수를 말한다.
재귀 호출 함수는 반복 고리를 끊을 수 있는 조건을 반드시 포함해야 한다.
이번 풀이에서는 if 문에 종료조건을 작성했다.
구슬의 개수와 친구들에게 나누어줄 구슬의 개수가 동일하거나 또는 재귀가 반복되어 share 값이 0일때 1이 리턴된다.