자바스크립트

[JavaScript] 구슬을 나누는 경우의 수

코딩하는둥이 2023. 9. 8. 17:14

문제 설명

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

 

입출력 예

ball share result
3 2 3
5 3 10

 

코드 

const facto = (num) => (num === 0 ? 1 : num * facto(num - 1));

const solution = (balls, share) => {
  return Math.round(
    facto(balls) / facto(balls - share) / facto(share)
  );
}

 

풀이

팩토리얼 함수를 이용해 만들어야 합니다.

facto는 num이 0일 경우 그 외의 경우 num과 facto(num - i)를 곱한 값을 반환합니다. 

const facto = (num) => (num === 0 ? 1 : num * facto(num - 1));

facto(balls)에서 balls 아이템 중에서 아무 아이템도 선택하지 않을 경우의 모든 가능한 조합 수를 나타냅니다.

facto(balls - share)는 balls에서 share 아이템을 선택하지 않은 경우의 모두 가능한 수를 나타냅니다.

facto(share) share 아이템을 선택하는 경우의 가능한 조합수를 나타냅니다. 

  return Math.round(
    facto(balls) / facto(balls - share) / facto(share)
  );

그것들을 나누게 된다면  balls 아이템 중에서 share 아이템을 선택하는 조합의 수가 계산이 됩니다. 

 

공부

팩토리얼

 자연수일 때, 1부터 n까지의 모든 자연수의 곱입니다.

 기호는 "!"를 사용하며 팩토리얼이라고 합니다.

5! = 5 * 4 * 3 * 2 * 1