์์ด
์๋ก ๋ค๋ฅธ n๊ฐ ์ค์ ์์๋ฅผ ๊ณ ๋ คํ์ฌ r๊ฐ๋ฅผ ์ ํํ๋ ๊ฒฝ์ฐ์ ์
์์ด ๊ตฌํํ๊ธฐ
function permutation(arr, selectNum) {
if (selectNum === 1) { // ์ ํํ๋ ค๋ ์์๊ฐ 1์ธ ๊ฒฝ์ฐ, ๋ฐฐ์ด์ ๋ชจ๋ ์์ ์ฐจ๋ก๋๋ก ์ถ๋ ฅ
return arr.map((i) => [i]);
}
return arr.reduce((acc, target, _, origin) => {
const rest = origin.filter((i) => target !== i); // target ์์๋ฅผ ์ ์ธํ ๋๋จธ์ง ๋ฐฐ์ด
const p_arr = permutation(rest, selectNum - 1); // ์ฌ๊ท๋ฅผ ์ฌ์ฉํด rest์ ์์ด ์ฐพ๊ธฐ
const add_arr = p_arr.map((i) => [target, ...i]) // rest ์์ด ์์๋ค ์์ target ์์ ์ถ๊ฐ
acc.push(...add_arr);
return acc; // arr ๋ฐฐ์ด์ ์์ด ์ถ๋ ฅ
}, []);
}
JavaScript
๋ณต์ฌ
์ค๋ณต ์์ด
function permutation(arr, selectNum) {
if (selectNum === 1) { // ์ ํํ๋ ค๋ ์์๊ฐ 1์ธ ๊ฒฝ์ฐ, ๋ฐฐ์ด์ ๋ชจ๋ ์์ ์ฐจ๋ก๋๋ก ์ถ๋ ฅ
return arr.map((i) => [i]);
}
return arr.reduce((acc, target, idx, origin) => {
const p_arr = permutation(origin, selectNum - 1); // ์ฌ๊ท๋ฅผ ์ฌ์ฉํด rest์ ์์ด ์ฐพ๊ธฐ
const add_arr = p_arr.map((i) => [target, ...i]) // rest ์์ด ์์๋ค ์์ target ์์ ์ถ๊ฐ
acc.push(...add_arr);
return acc; // arr ๋ฐฐ์ด์ ์์ด ์ถ๋ ฅ
}, []);
}
// ๋ฐฉ๋ฒ2
function permutation(arr, selectNum) {
const result = [];
if (selectNum === 1) return arr.map((v) => [v]);
arr.forEach((v, idx, arr) => {
const fixed = v;
const restArr = arr;
const permutationArr = permutation(restArr, selectNum - 1);
const combineFix = permutationArr.map((v) => [fixed, ...v]);
result.push(...combineFix);
});
return result;
}
JavaScript
๋ณต์ฌ
์กฐํฉ
์๋ก ๋ค๋ฅธ n๊ฐ ์ค์ ์์์ ์๊ด ์์ด r๊ฐ๋ฅผ ์ ํํ๋ ๊ฒฝ์ฐ์ ์
const getCombinations = function (arr, selectNumber) {
if (selectNumber === 1) return arr.map((value) => [value]); // 1๊ฐ์ฉ ํํ ๋, ๋ฐ๋ก ๋ชจ๋ ๋ฐฐ์ด์ ์์ return
return arr.reduce((acc, fixed, index, origin) => {
const rest = origin.slice(index + 1); // ํด๋นํ๋ fixed๋ฅผ ์ ์ธํ ๋๋จธ์ง ๋ค
const combinations = getCombinations(rest, selectNumber - 1); // ๋๋จธ์ง์ ๋ํด์ ์กฐํฉ์ ๊ตฌํ๋ค.
const attached = combinations.map((combination) => [fixed, ...combination]); // ๋์์จ ์กฐํฉ์ ๋ผ ๋์(fixed) ๊ฐ ๋ถ์ด๊ธฐ
results.push(...attached); // ๋ฐฐ์ด spread syntax ๋ก ๋ชจ๋๋ค push
}, []);
return results; // ๊ฒฐ๊ณผ ๋ด๊ธด results return
}
JavaScript
๋ณต์ฌ
์์๊ฐ 11๊ฐ ์ด์์ด๋ฉด ์คํ์ค๋ฒํ๋ก์ฐ ์ผ์ด๋จ
โ ์์๊ฐ ๋ง์ ๊ฒฝ์ฐ์๋ DP์ฌ์ฉ