❓ 순열 구하기

frenchkebab·2021년 9월 1일
post-thumbnail


2가지 방법으로 풀 수 있었다 (큰 틀은 동일)
1. Array에 m 칸(0)을 채우는 방식
2. 빈 배열에 push / pop 하는 방식
(나는 이전 문제 중복 순열 구하기를 풀면서 배운 1번 방식을 적용해 풀었는데(그 문제는 2번 방식으로 풀었음)
Solution을 보니 두 방식 모두로 풀었다.


풀이1

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

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

풀이2

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

let arr = [3, 6, 9];
console.log(solution(2, arr));
profile
Blockchain Dev Journey

0개의 댓글