머쓱이는 구슬을 친구들에게 나누어주려고 합니다. 구슬은 모두 다르게 생겼습니다. 머쓱이가 갖고 있는 구슬의 개수 balls와 친구들에게 나누어 줄 구슬 개수 share이 매개변수로 주어질 때, balls개의 구슬 중 share개의 구슬을 고르는 가능한 모든 경우의 수를 return 하는 solution 함수를 완성해주세요.
function solution(balls, share) {
let upper = BigInt(1),
under = BigInt(1);
for (let i = share + 1; i <= balls; i++) {
upper *= BigInt(i);
}
for (let i = 1; i <= balls - share; i++) {
under *= BigInt(i);
}
return upper / under;
}
아래쪽에 힌트로 위 공식이 나와있었다. 그래서 이 공식으로 해결한 방법이 위의 방법이었다. 재귀로 해결할 수 있다는 걸 알았지만, 아직까지 재귀를 사용하는게 어렵게 느껴진 것 같다.
간단하게 재귀로 풀어보았을 때, 아래와 같이 나왔다.
const factorial = (num) => (num === 0 ? 1 : num * factorial(num - 1));
function solution(balls, share) {
return Math.round(
factorial(balls) / (factorial(balls - share) / factorial(share))
);
}