fullfish
2022. 6. 14. 15:43
조합의 개수 공식
구글링해보니 여러가지 코드가 나왔다
예시 2가지
function combination(arr, selectNum) {
const result = [];
if (selectNum === 1) return arr.map((v) => [v]);
arr.forEach((v, idx, arr) => {
const fixed = v;
const restArr = arr.slice(idx + 1);
const combinationArr = combination(restArr, selectNum - 1);
const combineFix = combinationArr.map((v) => [fixed, ...v]);
result.push(...combineFix);
});
return result;
}
const conbination = (arr, bucket, n) => {
if (n === 0) {
console.log(bucket);
return;
}
for (let i = 0; i < arr.length; i++) {
const choice = arr[i];
const sliceArr = arr.slice(); // 재귀
conbination(sliceArr.slice(i + 1), bucket.concat(choice), n - 1);
}
};
conbination([1, 2, 3, 4], [], 3);
해당 코드들로 개념을 익히고
순열에서 만들었던 코드의 골격대로 바꿔보았다
코드
// 조합
function solution(arr, n) {
let result = []
function combination(n, tempArr, arr) {
if (n === 0) return result.push(tempArr.slice())
for (let i = 0; i < arr.length; i++) {
combination(n - 1, tempArr.concat(arr[i]), arr.slice(i + 1))
}
}
combination(n, [], arr)
return result
}
// 중복조합
function solution2(arr, n) {
let result = []
function combination(n, tempArr, index) {
if (n === 0) return result.push(tempArr.slice())
for (let i = index; i < arr.length; i++) {
combination(n - 1, tempArr.concat(arr[i]), i)
}
}
combination(n, [], 0)
return result
}
console.log(solution([1, 2, 3, 4], 3));
// 결과
[ [ 1, 2, 3 ], [ 1, 2, 4 ], [ 1, 3, 4 ], [ 2, 3, 4 ] ]