728x90
permutaion(순열)
순열(順列, Permutation)은 이름 그대로 구별되는 사물을 순서대로 줄세워서 나열한 경우의 수이다.
서로 다른 n개의 원소 중 r을 중복 없이 골라 순서에 상관 있게 나열
for문으로 이용한 순열 경우의수 (증가할수로 대처하는데 한계가 있음)
let iput = ["a", "b", "c"];
let count = 0;
function permutation(arr) {
for(let i = 0; i < arr.length; i++) {
for(let j = 0; j < arr.length; j++){
if (i == j) continue;
for(let k = 0; k < arr.length; k++){ // 증가 할수록 for문도 같이 증가함
if (i == k) continue;
if (j == k) continue;
console.log(arr[i], arr[j], arr[k]);
count++
}
}
}
}
permutation(input);
console.log(count);
결과 확인하기
for문으로 이용한 순열 경우의수
let iput = ["a", "b", "c"];
let count = 0;
function permutation(arr, s, r) {
// 1. 재귀함수를 멈춰야할 조건
if (s == r){ // 스타트 지점과 r지점이 이 같으면 멈춤
count++;
console.log(arr.join(" "));
return;
}
// 2. 재귀를 돌면서 변경되어야 할 부분/메인 로직
for(let i = s; i < arr.length; i++) {
[arr[s], arr[i]] = [arr[i], arr[s]]; // s 에 i를 넣고 i에 s를 넣음
permutation(arr, s +1, r); // 재귀함수
[arr[s], arr[i]] = [arr[i], arr[s]]; // 원상복귀
}
}
permutation(input, 0 , 2); // 데이터값 스타트, 갯수
console.log(count);
결과 확인하기
728x90
반응형
'JavaScript > Algorithm' 카테고리의 다른 글
없는 숫자 더하기 (1) | 2022.07.30 |
---|---|
음양더하기 (2) | 2022.07.29 |
완주하지 못한 선수 (2) | 2022.07.28 |
체육복 (4) | 2022.07.27 |
약수의 개수와 덧셈 (2) | 2022.07.26 |
댓글