순열(DFS 깊이우선탐색)
1부터 n까지의 숫자중
m개를 순열한다면
let arr = ["rock", "scissors", "paper"];
function rockPaperScissors(arr, n) {
let answer = [];
function DFS(L, S) {
if (L === 0) {
answer.push(S);
return;
}
for (let i = 0; i < arr.length; i++) {
if (!S.includes(arr[i])) DFS(L - 1, S.concat(arr[i])); //이건 순열
// DFS(L - 1, S.concat(arr[i])); //이건 중복 순열
}
}
DFS(n, []);
return answer;
}
console.log(rockPaperScissors(arr, 3));
//출력
[
[ 'rock', 'scissors', 'paper' ],
[ 'rock', 'paper', 'scissors' ],
[ 'scissors', 'rock', 'paper' ],
[ 'scissors', 'paper', 'rock' ],
[ 'paper', 'rock', 'scissors' ],
[ 'paper', 'scissors', 'rock' ]
]
저번 중복순열에서 이미 포함되어있으면 안넣는 로직만 추가해주면 된다
수정한 더 깔끔한 코드 : 중복순열(DFS 깊이우선탐색)