코딩테스트

코딩테스트 구슬을 나누는 경우의 수

김도현2 2023. 5. 31. 19:06
반응형

코딩테스트 구슬을 나누는 경우의 수

 

 

 

문제 설명

 

 

 

 

출력 예시

 

 

 

 

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 를 써보니 다행히 통과가 다 됐습니다~

 

문제조건을 제대로 고지하지 않은 출제자가 문제였던걸로.