본문 바로가기
JavaScript/Algorithm

순열(permutation)

by SyuMay 2022. 7. 25.
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

댓글


자바스크립트 사진

JavaScript

자세히보기