[Algorithm]_(DFS) 순열 구하기

이지·2021년 11월 7일

algorithm

목록 보기
8/10
function solution(m, arr){ 
  				// 순열 쌍을 담아줄 빈 배열을 생성한다
                let answer=[];
                n=arr.length;
  //순열은 숫자중복을 제한하기 때문에, 이미 선점된 숫자인지 check 해야한다.(체크배열) 
                let ch=Array.from({length:n}, ()=>0);
  //순열 1개를 임시 생성한다.
                let tmp=Array.from({length:m}, ()=>0);
                function DFS(L){
                  	//depth 가 m 이면 ref 아닌 val 참조로 얕은 복사하여 답 넣는다. 
                    if(L===m){
                        answer.push(tmp.slice()); 
                    }
                    else{
                    //
                        for(let i=0; i<n; i++){
                          //체크되지 않은 숫자만.. 
                            if(ch[i]===0){
                      //해당 인덱스 값을 체크, 후 tmp에는 arr의 i 번째 값을 넣어줌.
                                ch[i]=1;
                                tmp[L]=arr[i];
                                DFS(L+1);
                     //이전 노드로 돌아오면, ch 만 0으로 리셋해준다.          
                                ch[i]=0;
                            }
                        }
                    }
                }
                DFS(0);
                return answer;
            }

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

DFS처음에는 개념잡기 어려웠는데, 오히려 정형화된 풀이여서 응용하기 수월한 감이 있었다.
이 문제는 순열에 대한 개념이 추가되어, check 배열을 사용해 검증하는 아이디어가 새로웠다.

profile
이지피지레몬스퀴지🍋

0개의 댓글