10이하의 N개의 자연수가 주어지면 이 중 M개를 뽑아 일렬로 나열하는 방법을 모두 출력합 니다.
▣ 입력설명
첫 번째 줄에 자연수 N(3<=N<=10)과 M(2<=M<=N) 이 주어집니다. 두 번째 줄에 N개의 자연수가 오름차순으로 주어집니다.
▣ 출력설명
첫 번째 줄에 결과를 출력합니다. 맨 마지막 총 경우의 수를 출력합니다. 출력순서는 사전순으로 오름차순으로 출력합니다.
// NOTE : 순열 구하기 - DFS - 재귀함수
function solution(array, m) {
let answer = [];
let n = array.length;
// ch = [0,0,0]
let ch = Array.from({ length: n }, () => 0);
// tmp = [0,0]
let tmp = Array.from({ length: m }, () => 0);
function DFS(L) {
if (L === m) {
// tmp값을 얕은복사 해서 push 한다.
answer.push(tmp.slice());
} else {
for (let i = 0; i < n; i++) {
if (ch[i] === 0) {
// ch를 1로 변경(체크)
ch[i] = 1;
tmp[L] = array[i];
DFS(L + 1);
// ch를 0로 변경(체크해제)
ch[i] = 0;
}
}
}
}
DFS(0);
return answer;
}
console.log(solution([3, 6, 9], 2));