2023.07.28
타입스크립트 과제 중...
머쓱이는 구슬을 친구들에게 나누어주려고 합니다. 구슬은 모두 다르게 생겼습니다. 머쓱이가 갖고 있는 구슬의 개수 balls와 친구들에게 나누어 줄 구슬 개수 share이 매개변수로 주어질 때, balls개의 구슬 중 share개의 구슬을 고르는 가능한 모든 경우의 수를 return 하는 solution 함수를 완성해주세요.
프로그래머스 풀어 보자.
공식에 필요한 팩토리얼을 따로 계산해 각각의 변수에 넣어주었다.
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;
}
나의 풀이에서는 팩토리얼 계산이 필요할 때마다 계산했었다.
팩토리얼 재귀함수를 만들어 보았다. 이제는 팩토리얼 계산이 필요할 때 함수를 가져와 쓰기만 하면 된다.