[프로그래머스/Lv.0] 구슬을 나누는 경우의 수

Lainlnya·2023년 2월 10일
0

프로그래머스

목록 보기
18/49
post-thumbnail

문제 설명

머쓱이는 구슬을 친구들에게 나누어주려고 합니다. 구슬은 모두 다르게 생겼습니다. 머쓱이가 갖고 있는 구슬의 개수 balls와 친구들에게 나누어 줄 구슬 개수 share이 매개변수로 주어질 때, balls개의 구슬 중 share개의 구슬을 고르는 가능한 모든 경우의 수를 return 하는 solution 함수를 완성해주세요.

제한 사항

  • 1 ≤ balls ≤ 30
  • 1 ≤ share ≤ 30
  • 구슬을 고르는 순서는 고려하지 않습니다.
  • share ≤ balls

입출력 예

문제 풀이

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))
  );
}
profile
Growing up

0개의 댓글