μνκΈ°λ³Έμ΄λ‘ / κ²½μ°μ μ / μμ΄
: μ΄λ€ μ¬κ±΄ λλ μΌμ΄λ μ μλ κ²½μ°μ κ°μ§μλ₯Ό μ«μλ‘ νννλ κ²μ΄λ©°
μ£Όμ¬μ, μ·, κ°μλ°μ보, λμ λ±μμ μ°μΈλ€.
--> μ΄λ¬ν κ²½μ°μ μμλ μμ΄, μ‘°ν©, μ€λ³΅μμ΄ λ±μ΄ μμΌλ©°, μμ νμμ μ΄μ©νλ€.
μμ νμμ΄λ ?
μ»΄ν¨ν°μ λΉ λ₯Έ κ³μ° μλλ₯Ό μ μ΄μ©νλ λ°©λ²μΌλ‘ κ°λ₯ν λͺ¨λ λ°©λ²μ λμ΄νλ©° λ΅μ μ°Ύλ λ°©λ²μ΄λ€.
: μλ‘ λ€λ₯Έ nκ°μ μμ μ€μμ rμ μ€λ³΅ μμ΄ κ³¨λΌ μμμ μκ΄ μκ² λμ΄νλ κ²½μ°μ μ
= forλ¬Έκ³Ό μ¬κ·ν¨μλ‘ ννκ°λ₯νλ€.
--> κ·Έλ¬λ forλ¬Έμ λ½λ κ°μ λ§νΌ λμ΄λκΈ° λλ¬Έμ 보ν΅μ μ¬κ·ν¨μλ₯Ό μ΄λ€.
μμμ¬μ§
3κ°μ μνλ²³μΌλ‘ λ¨μ΄λ₯Ό λ§λλ κ²½μ°μ μ
// >> forλ¬ΈμΌλ‘ ꡬμ±
let input = ["a","b","c"];
let count = 0;
function permutation(arr) {
// i : 첫λ²μ§Έ μμΉ μν¬ μμ {i, o, o}
// j : λλ²μ§Έ μμΉ μν¬ μμ {i, j, o}
// -> νΉμλ iλ jκ° κ°μ κ²½μ°λ₯Ό continue μ΄μ©νμ¬ μ€ν΅ μ²λ¦¬ ν΄μ€λ€.
for (let i = 0; i < arr.length; i++) {
for (let j = 0; j < arr.length; j++) {
if (i == j) continue;
// k : μΈλ²μ§Έ μμΉ μν¬ μμ {i, j, k}
for (let k = 0; k < arr.length; k++) {
// iλ kκ° κ°μ κ²½μ° μ€ν΅
if (i == k) continue;
// jλ kκ° κ°μ κ²½μ° μ€ν΅
if (j == k) continue;
console.log(arr[i], arr[j], arr[k]);
count++;
}
}
}
}
permutation(input);
console.log(count); // 6κ°μ κ²½μ°μ μκ° λμ¨λ€.
/*
a b c
a c b
b a c
b c a
c a b
c b a
*/
forλ¬ΈμΌλ‘ ꡬνν μ½λμ΄λ©°, inputμ λ΄κΈ΄ a, b, c 3κ°μ μνλ²³μ μ΄μ©νμ¬ λ§λ€ μ μλ λ¨μ΄μ κ²½μ°μ μλ₯Ό λνλ΄ μ£Όμ΄μΌ νλ€.
μ°μ iλ₯Ό 첫λ²μ§Έ μμΉ μν¬ μμλ‘ μ ν΄λκ³ , jλ λλ²μ§Έ μμΉ μν¬ μμ, kλ μΈλ²μ§Έ μμΉ μν¬ μμλ‘ μ ν΄λλ€.
μ¬κΈ°μ 3κ°μ§ κ²½μ°κ° λ°μνλλ°,
μμ μΈκ°μ§λ₯Ό κ³ λ €νμ¬ ifλ¬Έμ μ΄μ©νμ¬ μ½λλ₯Ό μ§μ€λ€, count++λ₯Ό μ΄μ©ν΄ μμλ₯Ό νλμ© λλ €μ€λ€. μ¬κΈ°μ countλ indexκ°μ μλ―Έ
μ) a 루νκ° λ€ λλ©΄ -> b 루νκ° λ€ λλ©΄ -> c 루ν
forλ¬Έμ μ°μ§ μλλ€λ μ΄μ
= ifλ¬Έμ΄ value κ°μλ§νΌ μμ±
κ·Έλ κΈ° λλ¬Έμ κ°μ΄ λ§μ μλ‘ λ³΅μ‘ν΄μ§
// >> μ¬κ· ν¨μλ‘ κ΅¬μ±
let Input = ["a", "b", "c"];
let Count = 0;
// μ£Όμμ¬ν
// 1. μ¬κ·ν¨μλ₯Ό λ©μΆ°μΌ ν 쑰건
// 2. μ¬κ·λ₯Ό λλ©΄μ λ³κ²½λμ΄μΌ ν λΆλΆ / λ©μΈλ‘μ§
function permutation(arr, s, r) {
// = rμ λμ°©ν΄μΌν μΈλ±μ€
// sκ° rμ λλ¬νλ©΄ Count κ°μ μ¦κ° - μ½μλ‘ λ°°μ΄ μν νμΈ
if (s == r) {
Count++;
console.log(arr.join(" ")); // join λ©μλ -> λ¬Έμμ΄λ‘ λ³ν
return;
}
// 1. -> μ¬κ·μ λν break μν μ νλ λΆλΆ
// μ νλκ²μ λ½μ§ μμΌλ €κ³ 0 λμ sλΆν°λ‘ μ§μ
for (let i = s; i < arr.length; i++) {
[arr[s], arr[i]] = [arr[i], arr[s]]; // swap
// 첫λ²μ§Έ μμλ μ ν νμΌλ λλ²μ§Έ μμλ₯Ό μ ν -> s + 1
permutation(arr, s + 1, r);
[arr[s], arr[i]] = [arr[i], arr[s]]; // swap μμ볡κ·
/*
s = 0, r = 2 ["a", ]
s = 1, r = 2 ["a", "b", ]
s = 2, r = 2 ["a", "b", "c"]
--> μ forλ¬Έκ³Ό μΆλ ₯λλ κ°μ λμΌν¨
*/
}
}
permutation(Input, 0, 2); // 0λ²λΆν° 2λ²κΉμ§(3κ°) λ½λλ€.
console.log(Count);