본문 바로가기
Javascript/코딩테스트-연습

[JavaScript] 구슬을 나누는 경우의 수 - 프로그래머스

by BeomBe 2024. 3. 26.
반응형

문제 설명

 

 

자세한 설명은 링크 참조 부탁드립니다.

https://school.programmers.co.kr/learn/courses/30/lessons/120840


나의 풀이

while문에 share가 0이 될때까지 동작시켜 계산했다.

function solution(balls, share) {
  let answer = 1;
  while (share) {
    answer *= balls / share;
    balls--;
    share--;
  }
  return Math.round(answer);
}

 

다른사람들은 재귀함수를 사용하여 많이 풀었다.

const 팩토리얼 = (num) => num === 0 ? 1 : num * 팩토리얼(num - 1)

function solution(balls, share) {
  return Math.round(팩토리얼(balls) / 팩토리얼(balls - share) / 팩토리얼(share))
}

 

마지막으로 BigInt를 사용하여 풀이한 분들도 많았다.

* BigInt : BigInt 는 Number 원시 값이 안정적으로 나타낼 수 있는 최대치인 2^53 - 1보다 큰 정수를 표현할 수 있는 내장 객체입니다.

function solution(balls, share) {
  let factorial = [BigInt(1)];
  for (let i = 1; i <= balls; i++) {
		factorial[i] = factorial[i - 1] * BigInt(i);
	}
  return factorial[balls] / (factorial[balls - share] * factorial[share]);
}
반응형