(충격; ㄴ'0'ㄱ) 중복순열 구하기 : DFS

frenchkebab·2021년 8월 31일
post-thumbnail



내 풀이

function solution(n, m) {
  let answer = [];
  let arr = [];
  function DFS(cnt) {
    if (cnt > m) {
      answer.push(arr);
      return;
    }
    for (let i = 1; i <= n; i++) {
      arr.push(i);
      DFS(cnt + 1);
      arr.pop();
    }
  }
  DFS(1);
  return answer;
}

console.log(solution(3, 2));

처음에 이렇게 풀었는데...
답이 이렇게 나오는 것이 아닌가

당최 이해가 되지 않았는데...

설마 싶어서 해보니

function solution(n, m) {
  let answer = [];
  let arr = [];
  function DFS(cnt) {
    if (cnt > m) {
      let temp = arr.slice();
      answer.push(temp);
      return;
    }
    for (let i = 1; i <= n; i++) {
      arr.push(i);
      DFS(cnt + 1);
      arr.pop();
    }
  }
  DFS(1);
  return answer;
}

console.log(solution(3, 2));

answer.push(arr) 을 하고 나서
arr을 수정하고 나니, answer 안의 arr 도 변했다.....
이 무슨......


Solution 풀이

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

  DFS(0);
  return answer;
}

console.log(solution(3, 2));

전반적으로 내가 푼 풀이와 비슷한 것 같다
(나는 빈 배열에 push를 했고, solution에서는 세 칸을 만들어 놓고 각 칸에 숫자를 바꾼 것만 다르다)

profile
Blockchain Dev Journey

0개의 댓글