자바스크립트 코딩테스트 '순열 구하기'

10이하의 N개의 자연수가 주어지면 이 중 M개를 뽑아 일렬로 나열하는 방법을 모두 출력하라.(중복X)

  1. 내 풀이 :
    중복 제거가 되지 않았다. 어떻게 해야될지 모르는 상태...
function solution(m, arr){         
    let answer=[];
    let n=arr.length;
    let ch=Array.from({length:m},()=>0);
    function DFS(L){
        if(L===m){
            answer.push(ch.slice());
        }
        else{
            for(let i=0; i<=m; i++){
                ch[L]=arr[i];
                DFS(L+1);
            }
        }
    }
    DFS(0);
    return answer;
}

let arr=[3, 6, 9];
console.log(solution(2, arr));
  1. 쌤 풀이 :
    check배열을 만들어서 for문 안에 if문을 넣어 해당 배열값을 사용했다면 다음 인덱스에는 해당 배열값을 사용하지 못하게 만들었다.
function solution(m, arr){         
    let answer=[];
    n=arr.length;
    let ch=Array.from({length:n},()=>0);
    let tmp=Array.from({length:m},()=>0);
    function DFS(L){
        if(L===m){
            answer.push(tmp.slice());
        }
        else{
            for(let i=0; i<n; i++){
                if(ch[i]===0){
                    ch[i]=1;
                    tmp[L]=arr[i];
                    DFS(L+1);
                    ch[i]=0;
                }
            }
        }
    }
    DFS(0);
    return answer;
}

let arr=[3, 6, 9];
console.log(solution(2, arr));

좋은 웹페이지 즐겨찾기