순열구하기 - DFS - 재귀함수

원동휘·2023년 1월 5일
0

NOTE - 코테

목록 보기
39/42

문제

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));
profile
Front-End Developer #Nextjs #React #Typescript

0개의 댓글