카테고리 없음
순열 dfs 재귀 동작 이해
sakuraop
2022. 12. 1. 18:14
https://www.youtube.com/watch?v=0tcgYHU8IIs
순열 만들기 dfs 재귀 동작 이해 우선 a, b, c가 맨 앞에 있는 배열을 전달 i=0, for (j=0) abc => abc [[arr[i]], arr[j]] = [[arr[j]], arr[i]]; abc 에 대해서 dfs 실행 dfs(i + 1, arr); i=0, for (j=1) abc => bac [[arr[i]], arr[j]] = [[arr[j]], arr[i]]; bac 에 대해서 dfs 실행 dfs(i + 1, arr); i=0, for (j=2) abc => cba [[arr[i]], arr[j]] = [[arr[j]], arr[i]]; cba 에 대해서 dfs 실행 dfs(i + 1, arr); 그리고 나머지끼리 자리를 바꾼 뒤에 시행 a, bc,cb b, ac, ca c, ab, ba i=1, for (j=1) abc => abc [[arr[i]], arr[j]] = [[arr[j]], arr[i]]; abc 에 대해서 dfs 실행 dfs(i + 1, arr); i=1, for (j=2) abc => acb [[arr[i]], arr[j]] = [[arr[j]], arr[i]]; acb 에 대해서 dfs 실행 dfs(i + 1, arr); i=1, for (j=1) bac => bac [[arr[i]], arr[j]] = [[arr[j]], arr[i]]; bac 에 대해서 dfs 실행 dfs(i + 1, arr); i=1, for (j=2) bac => bca [[arr[i]], arr[j]] = [[arr[j]], arr[i]]; bca 에 대해서 dfs 실행 dfs(i + 1, arr); i=1, for (j=1) cba => cba [[arr[i]], arr[j]] = [[arr[j]], arr[i]]; cba 에 대해서 dfs 실행 dfs(i + 1, arr); i=1, for (j=2) cba => cab [[arr[i]], arr[j]] = [[arr[j]], arr[i]]; cab 에 대해서 dfs 실행 dfs(i + 1, arr); i=3 이 되면 각각의 함수가 배열을 하나씩 반환(push)하게 됨 abc acb bac bca cba cab |
const permutation = (arr) => {
const result = [];
const dfs = (i, arr) => {
if (i === arr.length) {
return result.push([...arr]);
}
for (let j = i; j < arr.length; j++) {
console.log(i, j, arr);
[[arr[i]], arr[j]] = [[arr[j]], arr[i]];
dfs(i + 1, arr);
[[arr[i]], arr[j]] = [[arr[j]], arr[i]];
}
};
dfs(0, arr);
// console.log(result, "result");
return result;
};
permutation(["a", "b", "c"]);
|