티스토리 뷰

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

8-10. 순열 구하기 (DFS) // 재귀 함수로 순열 구하기 (중요)

YG - 96년생 , 강아지 있음, 개발자 희망 2022. 3. 24. 09:53

문제

10이하의 N개의 자연수가 주어지면 이 중 M개를 뽑아 일렬로 나열하는 방법을 모두 출력합 니다.

풀이

function solution(m, arr) {
  let answer = [];
  n = arr.length;
  let ch = Array.from({ length: n }, () => 0);
  let tmp = Array.from({ length: m }, () => 0);
  function DFS(L) {
    if (L === m) {
      answer.push(tmp.slice());
    } else {
      for (let i = 0; i < n; i++) {
        if (ch[i] === 0) {
          ch[i] = 1;
          tmp[L] = arr[i];
          DFS(L + 1);
          ch[i] = 0;
        }
      }
    }
  }
  DFS(0);
  return answer;
}

let arr = [3, 6, 9, 5, 8];
console.log(solution(2, arr));

재귀 함수로 순열을 구하는 것은 순열을 조합할 숫자가 몇개이든 코드 변화 없이 DFS 재귀함수로 풀 수 있기 때문에 중요합니다

 

위의 순열 푸는 로직

 

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함