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 배열을 사용해 검증하는 아이디어가 새로웠다.