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' ]
]
저번 중복순열에서 이미 포함되어있으면 안넣는 로직만 추가해주면 된다
수정한 더 깔끔한 코드 : https://fullfish.tistory.com/72?category=1053918
중복순열(DFS 깊이우선탐색)
맨 아래에 다듬은 수정 코드 업데이트 1부터 n까지의 숫자중 m개를 중복순열한다면 function permutationWithRepetition(n, m) { let arr = new Array(m).fill(0); // let arr = Array.from({ length: m }, () =>..
fullfish.tistory.com
'코딩 테스트 > 알고리즘 공부' 카테고리의 다른 글
| 확장된 유클리드 호제법 (gcd) (2) | 2022.05.31 |
|---|---|
| 유클리드 호제법 이론 (최대 공약수 구하기) (0) | 2022.05.31 |
| 거듭제곱 시간복잡도 줄이기 (0) | 2022.05.31 |
| 중복순열(DFS 깊이우선탐색) (2) | 2022.04.26 |
| 소수 판별 (0) | 2022.04.20 |