/**
* Q. 자연수 n을 이진법으로 변환했을 때 나오는 1의 개수를 k라고 했을 때,
* n보다 작은 자연수 중에서 이진법으로 변환하여
* 1의 개수가 k인 수가 몇 개 있는지를 return 하도록 solution 함수를 완성해 주세요.
*/
이 코딩 문제를 효율적으로 풀기 위해 직감적으로 Combination(조합)이 필요하다고 느꼈다. (확률과 통계에서 배운 개념들이 스르륵 스쳐갔다.)
정확히는 이항계수를 구해야하는데 이항계수란 다음과 같다.

위의 이항계수를 코드로 구현해보자. 크게 어려울 것은 없다.
//10 C 2 => getCombinationsCount(10, 2)
function getCombinationsCount(총원소수, 선택원소수) {
const 곱셈 = (a, b) => a * b;
let 분자 = [], 분모 = [];
for (let i = 0; i < 선택원소수; i++) {
분자.push(총원소수 - i);
분모.push(선택원소수 - i);
}
return 분자.reduce(곱셈) / 분모.reduce(곱셈);
}
위 문제는 이항계수를 코드로 만드는 것 자체가 어렵다기보단 조합할 케이스들을 정의하는것 자체가 어렵다. 프로그래머스 4레벨에 해당되는 문제라고 하는데 결국 풀어내고 효율성테스트까지 통과하긴 했으나 참으로 어려운 문제였다. 방법은 참신했다고 보는데 오랜만에 다시보니 이해하기 참으로 어려웠다. 오랜만에 옛날 수학공부했던 것도 생각나면서 몰입했던 시간이었다.
ps1. 풀이가 궁금하다면 비밀댓글~
ps2. 갑자기 땡기는 콤비네이션 pizzzza

/**
* Q. 자연수 n을 이진법으로 변환했을 때 나오는 1의 개수를 k라고 했을 때,
* n보다 작은 자연수 중에서 이진법으로 변환하여
* 1의 개수가 k인 수가 몇 개 있는지를 return 하도록 solution 함수를 완성해 주세요.
*/
이 코딩 문제를 효율적으로 풀기 위해 직감적으로 Combination(조합)이 필요하다고 느꼈다. (확률과 통계에서 배운 개념들이 스르륵 스쳐갔다.)
정확히는 이항계수를 구해야하는데 이항계수란 다음과 같다.

위의 이항계수를 코드로 구현해보자. 크게 어려울 것은 없다.
//10 C 2 => getCombinationsCount(10, 2)
function getCombinationsCount(총원소수, 선택원소수) {
const 곱셈 = (a, b) => a * b;
let 분자 = [], 분모 = [];
for (let i = 0; i < 선택원소수; i++) {
분자.push(총원소수 - i);
분모.push(선택원소수 - i);
}
return 분자.reduce(곱셈) / 분모.reduce(곱셈);
}
위 문제는 이항계수를 코드로 만드는 것 자체가 어렵다기보단 조합할 케이스들을 정의하는것 자체가 어렵다. 프로그래머스 4레벨에 해당되는 문제라고 하는데 결국 풀어내고 효율성테스트까지 통과하긴 했으나 참으로 어려운 문제였다. 방법은 참신했다고 보는데 오랜만에 다시보니 이해하기 참으로 어려웠다. 오랜만에 옛날 수학공부했던 것도 생각나면서 몰입했던 시간이었다.
ps1. 풀이가 궁금하다면 비밀댓글~
ps2. 갑자기 땡기는 콤비네이션 pizzzza
