상세 컨텐츠

본문 제목

[프로그래머스] 구슬을 나누는 경우의 수

Programming/Algorithm

by 겨리! 2022. 11. 20. 23:43

본문

 

 

https://school.programmers.co.kr/learn/courses/30/lessons/120840

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

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

 

※ 서로 다른 n개 중 m개를 뽑는 경우의 수 공식 : n! / (n-m)! X m!

 

팩토리얼을 이용하여 푸는 문제였다!!!

팩토리얼(factorial) : n이 자연수일 때, 1부터 n까지의 모든 자연수의 곱을 의미. n 팩토리얼은 n!으로 표시한다.

 

function solution(balls, share) {
    // 서로 다른 n개 중 m개를 뽑는 경우의 수 공식
    // n!/(n-m)!*m!
    return factorial(balls)/(factorial(balls-share) * factorial(share));
}

function factorial(num){
    let result = BigInt(1);
    // 그냥 number로 계산처리를 하면 정상적인 결과를 출력하지 않는다.
    // 그래서 BitInt로 처리
    for(let i = 2; i <= num; i++){
        result *= BigInt(i);
    }
    return result;
}

 


자바스크립트에서의  Number VS BigInt

자바스크립트에서는 -(2^53 - 1)과 2^53 - 1 사이의 수만 안전하게 다룰 수 있다.

Number.MAX_SAFE_INTEGER // 9007199254740991
Number.MIN_SAFE_INTEGER; // -9007199254740991

최대값 이상으로 값을 더하거나 최소값 이하로 값을 빼려고 하면 정상적으로 표현되지 않는다. (에러는 안 남)

 

 

출처

https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/BigInt

 

BigInt - JavaScript | MDN

**BigInt**는 Number 원시 값이 안정적으로 나타낼 수 있는 최대치인 2^53 - 1보다 큰 정수를 표현할 수 있는 내장 객체입니다.

developer.mozilla.org

 

'Programming > Algorithm' 카테고리의 다른 글

[리트코드] Remove Element  (0) 2023.03.31
[리트코드] Duplicate Zeros  (0) 2023.03.30
[프로그래머스] 소인수분해  (0) 2022.11.17
[프로그래머스] 최빈값 구하기  (0) 2022.11.14
[프로그래머스] 약수 구하기  (0) 2022.11.04

관련글 더보기

댓글 영역