์๊ณ ๋ฆฌ์ฆ
๋ฐฑํธ๋ํน
alswlfl
2026. 4. 4. 22:34
- ๋ชจ๋ ๊ฒฝ์ฐ์ ์ ๊ณ ๋ คํ ๋ ์ฌ์ฉ
- ์ผ๋ฐ์ ์ผ๋ก ๊ทธ๋ํ/ํธ๋ฆฌ์ ๋ชจ๋ ์์๋ฅผ ์์ ํ์ํ๊ธฐ ์ํ ๋ชฉ์ ์ผ๋ก ์ฌ์ฉ
- DFS์์ ์ฐจ์ด์
- DFS๋ ์ผ๋ฐ์ ์ผ๋ก ์์ ํ์ ๋ชฉ์ ์ผ๋ก, ์ฌ๊ท ํจ์๋ฅผ ์ด์ฉํด ๊ตฌํ
- ๋ฐฑํธ๋ํน๋ ์ฌ๊ท ํจ์๋ฅผ ์ด์ฉํด ๊ตฌํํ๋ ๊ฒ์ด ์ผ๋ฐ์ ์ด์ง๋ง, ๋จ์ํ ์์ ํ์ํ๋ ๊ฒ์ด ์๋๋ผ ์กฐ๊ฑด์ ๋ฐ๋ผ ์ ๋งํ ๋ ธ๋๋ก ์ด๋
๊ทธ๋ํ ํํ ๋ฐฉ์(2๊ฐ์ง)

1. ์ธ์ ํ๋ ฌ
| 0 | 1 | 0 | 0 |
| 1 | 0 | 1 | 1 |
| 0 | 1 | 0 | 1 |
| 0 | 1 | 1 | 0 |
2. ์ธ์ ๋ฆฌ์คํธ
| 0 | |
| 1 | 2 |
| 2 | 1, 3, 4 |
| 3 | 2, 4 |
| 4 | 2, 3 |
๋ฐฑํธ๋ํน ๊ธฐ๋ณธ ํํ
function recursive() {
if ์ข
๋ฃ ์กฐ๊ฑด์ ๋ง์กฑํ๋ค๋ฉด {
์ฒ๋ฆฌ;
}
for ์์ ๋
ธ๋๋ฅผ ํ๋์ฉ ํ์ธํ๋ฉฐ {
if ์์์ ์กฐ๊ฑด์ ๋ง์กฑํ๋ค๋ฉด {
์์ ๋
ธ๋ ๋ฐฉ๋ฌธ ์ฒ๋ฆฌ;
์ฌ๊ท ํจ์ ํธ์ถ;
์์ ๋
ธ๋ ๋ฐฉ๋ฌธ ์ฒ๋ฆฌ ํด์ ;
}
}
}
์์) N-Queen ๋ฌธ์
8X8 ์ฒด์ค ๋ณด๋ ์์ ํธ 8๊ฐ๊ฐ ์๋ก ๊ณต๊ฒฉํ ์ ์๊ฒ ๋๋ ๋ฌธ์
- 64๊ฐ์ ์์น์ 8๊ฐ์ ํธ์ ์ค์นํ๋ ๋ชจ๋ ์กฐํฉ์ ์๋ Combination(64, 8) → ๊ฐ ํธ์ด ์๋ก ๊ณต๊ฒฉ ๊ฐ๋ฅํ์ง ๊ฒ์ฌํ๋ ๋ฐฉ์์ ์ฌ์ฉํ๋ฉด ๊ฒฝ์ฐ์ ์๊ฐ ๋งค์ฐ ์ปค์ง
- ์์ ํ์์ ํ๋๋ผ๋ ์ ๋งํ ๊ฒฝ์ฐ์์๋ง ํ์ ๊ฐ๋ฅํ๋๋ก ๊ตฌํ
- N๊ฐ์ ํธ์ ๋๊ธฐ ์ํด์๋ ๊ฐ ํ๋ง๋ค 1๊ฐ์ฉ์ ํธ์ ๋์์ผ ํจ → 224
- ํธ๋ฆฌ ํน์ ๊ทธ๋ํ ๊ตฌ์กฐ๋ก ํํํ๋ฉด ๋ค๋ฅธ ํธ์ ๋์ ์์น ๊ณ ๋ คํด์ ์ด์ ๊น์ง ๋์๋ ํธ๋ค๊ณผ ์์ถฉ๋์ง ์๋ ์กฐ๊ฑด์ ๋ง์กฑํ๋ ์์น์ ๋ํด์๋ง ์ฌ๊ท ํจ์ ํธ์ถ
const n = 0; // ์ฒด์คํ ํฌ๊ธฐ ํ
const queens = []; // ํ์ฌ ์ฒด์คํ์ ๋์ ํธ์ ์์น ์ ๋ณด๋ค
// (x, y) ์์น์ ํธ ๋์ ์ ์๋์ง ํ์ธ
function possible(x, y) {
// ํ์ฌ๊น์ง ๋์๋ ๋ชจ๋ ํธ์ ์์น ํ๋์ฉ ํ์ธ
for (const [a, b] of queens) {
if (a === x || b === y) return false; // ํ์ด๋ ์ด์ด ๊ฐ์ผ๋ฉด ๋์ ์ ์์
if (Math.abs(a - x) === Math.abs(b - y)) return false; // ๋๊ฐ์ ์ ์์นํ ๊ฒฝ์ฐ ๋์ ์ ์์
}
return true;
}
let cnt = 0;
function dfs(row) {
if (row === n) cnt += 1; // ํธ N๊ฐ๋ฅผ ๋ฐฐ์นํ ์ ์๋ ๊ฒฝ์ฐ ์นด์ดํธ ์ฆ๊ฐ
for (let i = 0; i < n; i++) {
if (!possible(row, i)) continue; // ํ์ฌ ์์น์ ๋์ ์ ์๋ค๋ฉด ๋ฌด์
queens.push([row, i]); // ํ์ฌ ์์น์ ํธ ๋๊ธฐ
dfs(row + 1); // ์ฌ๊ท ํจ์ ํธ์ถ
queens.pop(); // ํ์ฌ ์์น์์ ํธ ์ ๊ฑฐ
}
}