순열이란, 서로 다른 N개 중에서 R개를 선택하는 경우 (순서 중요👌 )
swap을 이용한 순열 만들기
/**
*
* @param {array} array
* @param {number} deep
* @param {number} target
*/
const permutation = (array, res = [], target = array.length, deep = 0) => {
if (deep === target) {
res.push(array.slice(0, target));
return;
}
for (let index = deep; index < array.length; index++) {
swap(array, deep, index);
permutation(array, res, target, deep + 1);
swap(array, deep, index);
}
};
const swap = (array, a, b) => {
let tmp = array[a];
array[a] = array[b];
array[b] = tmp;
};
const getPermutationList = (array, target) => {
let res = [];
permutation(array, res, target);
return res;
};
const array = Array(3)
.fill()
.map((_, i) => i + 1);
console.log(getPermutationList(array));
/* --------------------------------------------------
[ 1, 2, 3 ]
[ 1, 3, 2 ]
[ 2, 1, 3 ]
[ 2, 3, 1 ]
[ 3, 2, 1 ]
[ 3, 1, 2 ]
*/
'알고리즘, 자료구조' 카테고리의 다른 글
스택이용해 배열 거꾸로 출력하기 (0) | 2022.10.24 |
---|---|
[leetcode] 20. Valid Parentheses (0) | 2022.10.24 |
[프로그래머스] 분수의 덧셈 (0) | 2022.10.19 |
[js] 최대 공약수, 최소공배수 구하기 (feat. 유클리드 호제법) (0) | 2022.10.19 |
[프로그래머스] 성격 유형 검사하기 (0) | 2022.08.19 |