N이 주어졌을 때, 1부터 N까지의 수로 이루어진 순열을 사전순으로 출력하는 프로그램을 작성하시오.
첫째 줄에 N(1 ≤ N ≤ 8)이 주어진다.
첫째 줄부터 N!개의 줄에 걸쳐서 모든 순열을 사전순으로 출력한다.
3
1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1
const fs = require('fs');
let N = fs.readFileSync(0, 'utf-8').toString().trim();
N = parseInt(N);
let checked = Array.from({ length: N }, () => false);
let sequence = [];
let permutation = [];
DFS(0);
console.log(sequence.toString().replaceAll(',', '\n'));
function DFS(depth) {
if (depth === N) {
sequence.push(permutation.slice().join(' '));
return;
}
for (let i = 0; i < N; i++) {
if (!checked[i]) {
permutation.push(i + 1);
checked[i] = true;
DFS(depth + 1);
permutation.pop();
checked[i] = false;
}
}
}
이전에 백트래킹 문제를 풀게 됐는데 백트래킹을 정말 오랜만에 풀어 기억이 완전 소각되었기도 했고, 아직 자바스크립트로 자료구조/알고리즘을 구현하기엔 부족한 지식들이 많아서 이 부분들을 다시 공부한 뒤에 이와 관련된 문제들을 풀어야겠다고 생각했다. (덱이라던가...DFS...등등등) 그러다가 오늘 백트래킹 문제를 또 만나게 됐는데 더는 미루면 안되겠다 싶어서 풀어보게 되었다. 빨리 자료구조랑 알고리즘을 다시 복습해서 더 어려운 문제들을 풀어서 익숙해지게 만들어야겠다. 이런 간단한 백트래킹을 구현하는데에도 버벅이던게 좀 많았던 것 같다...