더보기
머쓱이는 구슬을 친구들에게 나누어주려고 합니다. 구슬은 모두 다르게 생겼습니다. 머쓱이가 갖고 있는 구슬의 개수 balls와 친구들에게 나누어 줄 구슬 개수 share이 매개변수로 주어질 때, balls개의 구슬 중 share개의 구슬을 고르는 가능한 모든 경우의 수를 return 하는 solution 함수를 완성해주세요.
제한사항
- 1 ≤ balls ≤ 30
- 1 ≤ share ≤ 30
- 구슬을 고르는 순서는 고려하지 않습니다.
- share ≤ balls
조합으로 계산하는 문제였기 때문에 코드는 금방 완성했는데 자꾸 테스트 케이스 3개 정도가 에러가 났다.
function solution(balls, share) {
let answer = 0;
function fac(n){
let f = 1;
for(let i=2; i <= n; i++){
f *= i;
}
return f;
}
if ( balls === share){
answer = 1;
} else {
let a = fac(balls);
let b = fac(balls - share);
let c = fac(share);
answer = a / (b*c);
}
return answer;
}
구글링해보니, BigInt()를 사용해야 한다는 것이었다.
BigInt() 는 길이의 제약 없이 정수를 다룰 수 있게 해주는 숫자형이다. 아무래도 팩토리얼을 사용하다보면 큰 숫자를 다루게 되다보니 필요한 듯하다.
https://ko.javascript.info/bigint
BigInt
ko.javascript.info
BigInt()를 사용하여 수정한 코드는 다음과 같다.
function solution(balls, share) {
let answer = 0;
function fac(n){
let f = BigInt(1);
for(let i=2; i <= n; i++){
f *= BigInt(i);
}
return f;
}
if ( balls === share){
answer = 1;
} else {
let a = fac(balls);
let b = fac(balls - share);
let c = fac(share);
answer = a / (b*c);
}
return answer;
}
'Algorithm > Programmers' 카테고리의 다른 글
[프로그래머스 JS] 문자열 계산하기 (0) | 2022.12.06 |
---|---|
[프로그래머스 JS] 소인수분해 (0) | 2022.11.22 |
[프로그래머스 JS] 프로그래머스 최빈값 구하기 (1) | 2022.11.12 |
[프로그래머스 JS] 최대공약수 최소공약수 유클리드 호제법 (0) | 2022.11.10 |
[구현] 문자열 재정렬 (파이썬) (0) | 2022.08.04 |