[Lv.0] 구슬을 나누는 경우의 수 ***

01수정·2022년 11월 14일
0
post-thumbnail
post-custom-banner

<입문 100문제> Day 09 - 수학, 문자열, 해시, 완전탐색, 조건문

문제

문제


풀이

1) 팩토리얼 중첩함수 사용 : X

function solution (balls, share) {
    function factorial (n) {
        return n ? n * factorial(n-1) : 1
    }

    return (factorial(balls) / (factorial(balls-share) * factorial(share)))
}

2) 팩토리얼(ver.BigInt) 중첩함수 사용 : O

balls, share의 범위를 감당하기 위해 BigInt 적용

function solution (balls, share) {
    function factorial (num) {
        return num ? BigInt(num) * factorial(BigInt(num)-1n) : 1n
    }

    return (factorial(balls) / (factorial(balls-share) * factorial(share)))
}

해답

function solution (balls, share) {
    const [n, m] = [balls, share]
    const fact = [BigInt(1), BigInt(1)]

    for (let i=2; i<=n; i++) {
        fact[i] = fact[i-1] * BigInt(i)
    }
    return Number(fact[n] / (fact[n-m] * fact[m]))
}

해답 풀이

(1) 서로 다른 n개 중 m개를 뽑는 경우의 수 공식

(2) 구조분해할당

const [n, m] = [balls, share] 

(3) BigInt 타입의 1 (=1n) 을 2개 가진 Array 생성

const fact = [BigInt(1), BigInt(1)]

참고자료

profile
새싹 FE 개발자
post-custom-banner

0개의 댓글