15649. N과 M(1)
const fs = require("fs");
const input = fs
.readFileSync(process.platform === "linux" ? "/dev/stdin" : "input.txt")
.toString();
const [N, M] = input.split(" ").map(Number);
const visitied = Array(N + 1).fill(false);
const str = [];
function backTracking(curLength) {
if (curLength === M) {
console.log(str.join(" "));
return;
}
for (let i = 1; i <= N; i++) {
if (visitied[i] === false) {
visitied[i] = true;
str[curLength] = i;
backTracking(curLength + 1);
visitied[i] = false;
}
}
}
backTracking(0);
15650. N과 M(2)
const fs = require("fs");
const input = fs
.readFileSync(process.platform === "linux" ? "/dev/stdin" : "input.txt")
.toString();
const [N, M] = input.split(" ").map(Number);
const visitied = Array(N + 1).fill(false);
const str = [];
function backTracking(start, curLength) {
if (curLength === M) {
console.log(str.join(" "));
return;
}
for (let i = start; i <= N; i++) {
if (visitied[i] === false) {
visitied[i] = true;
str[curLength] = i;
backTracking(i + 1, curLength + 1);
visitied[i] = false;
}
}
}
backTracking(1, 0);
15652. N과 M(4)
const fs = require("fs");
const input = fs
.readFileSync(process.platform === "linux" ? "/dev/stdin" : "input.txt")
.toString();
const [N, M] = input.split(" ").map(Number);
const str = [];
function backtracking(start, strLength) {
if (strLength === M) {
console.log(str.join(" "));
return;
}
for (let i = start; i <= N; i++) {
str.push(i);
backtracking(start, strLength + 1);
str.pop();
start++;
}
}
backtracking(1, 0);
9663. N-Queen
const fs = require("fs");
const { debugPort } = require("process");
const input = fs
.readFileSync(process.platform === "linux" ? "/dev/stdin" : "input.txt")
.toString();
const N = Number(input);
const visitedCol = Array(N).fill(false);
const visitedDiag1 = Array(2 * N).fill(false);
const visitedDiag2 = Array(2 * N).fill(false);
let cnt = 0;
function backtracking(depth) {
if (depth === N) {
cnt++;
return;
}
for (let i = 0; i < N; i++) {
if (
!visitedCol[i] &&
!visitedDiag1[depth - i + N] &&
!visitedDiag2[depth + i]
) {
visitedCol[i] = true;
visitedDiag1[depth - i + N] = true;
visitedDiag2[depth + i] = true;
backtracking(depth + 1);
visitedCol[i] = false;
visitedDiag1[depth - i + N] = false;
visitedDiag2[depth + i] = false;
}
}
}
backtracking(0);
console.log(cnt);