코딩 테스트/알고리즘 공부

순열(DFS 깊이우선탐색)

fullfish 2022. 5. 9. 02:15

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