반응형
코딩테스트 구슬을 나누는 경우의 수
문제 설명
출력 예시
n개중에 m개의 공을 뽑는 경우의 수를 구하는 문제입니다.
예를 들어 3개중 2개의 공을 뽑는다고 하면 경우의 수는 3개가 되겠죠.
또 5개중에 3개를 고른다고 치면 경우의 수는 10이 됩니다.
힌트에 공식도 줬으니 다 푼거나 마찬가지 입니다. 팩토리얼을 위한 코드를 짜면 되겠군요!
let balls = 5;
let share = 3;
function fac(gob){
for(let i=gob; i>0; i--){
num *= i;
}
return num;
}
우선 팩토리얼을 위한 함수를 만들었습니다.
정수가 담긴 변수를 가져와 1이 될 때까지 1씩 낮춰 곱해주는 함수 입니다.
let balls = 5;
let share = 3;
let answer = 0;
let n = fac(balls);
let m = fac(share);
let nm = fac(balls-share)
function fac(gob){
for(let i=gob; i>0; i--){
num *= i;
}
return num;
}
answer = Math.round(n/(nm*m));
// 10
공식을 이용해서 총 공의 개수는 n, 뽑는 경우의 수를 m 으로 변수명을 줬습니다.
처음엔 그냥 공식을 이용해도 테스트 통과가 안됐습니다.
문제 조건엔 없었지만 소숫점이 통과가 안됐던거 같습니다.
그래서 Math.floor를 이용하여 소숫점을 버려도 몇개의 테스트가 통과가 안됐습니다...
혹시나 하고 반올림하는 Math.round 를 써보니 다행히 통과가 다 됐습니다~
문제조건을 제대로 고지하지 않은 출제자가 문제였던걸로.