타입스크립트 TIL

songhsb·2023년 7월 28일
0

내일배움캠프

목록 보기
66/106

2023.07.28

오늘의 회고

타입스크립트 과제 중...

구슬을 나누는 경우의 수

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

프로그래머스 풀어 보자.

나의 풀이

서로 다른 n개 중 m개를 뽑는 경우의 수 공식
공식에 필요한 팩토리얼을 따로 계산해 각각의 변수에 넣어주었다.

function solution(balls, share) {
    let answer = 0;
    let nFactorial = 1;
    let mFactorial = 1;
    let nMinusM = balls - share;
    let nMMFactorial = 1;
    for(i=1; i<=balls; i++) nFactorial*=i;
    for(i=1; i<=share; i++) mFactorial*=i;
    for(i=1; i<=nMinusM; i++) nMMFactorial*=i;
    answer = Math.round(nFactorial/(nMMFactorial*mFactorial));
    return answer;
}

팀원들과 같이 풀어본 방법을 공유해 보았다. 여러가지 풀이 방법 중 재귀함수를 활용한 방법이 인상깊었다. 다시 한번 풀어보자.

재귀함수 풀이

function solution(balls, share) {
    let answer = 0;
  	// 팩토리얼을 계산하는 재귀함수
    const factorial = (n) => {
        if(n<=1) return 1;
        return n*factorial(n-1);
    }
    answer = Math.round(factorial(balls)/(factorial(balls-share)*factorial(share)));
    return answer;
}

나의 풀이에서는 팩토리얼 계산이 필요할 때마다 계산했었다.
팩토리얼 재귀함수를 만들어 보았다. 이제는 팩토리얼 계산이 필요할 때 함수를 가져와 쓰기만 하면 된다.

profile
개발공부!

0개의 댓글