// 팩토리얼
const factorial = (n) => {
if (n < 2) return 1;
return n * factorial(n - 1);
};
// 순열
const permutaion = (n, r) => {
return factorial(n) / factorial(n - r);
};
// 조합
const combination = (n, r) => {
return permutaion(n, r) / factorial(r);
};
// 조합
function combination(arr, num) {
let result = [];
if (num < 2) return arr.map((e) => [e]);
arr.forEach((e, i, array) => {
const rest = [...array.slice(0, i), ...array.slice(i + 1)];
const combinations = combination(rest, num - 1);
const combiArr = combinations.map((x) => [e, ...x]);
result.push(...combiArr);
});
return result;
}