์•Œ๊ณ ๋ฆฌ์ฆ˜

๋ฐฑํŠธ๋ž˜ํ‚น

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) → ๊ฐ ํ€ธ์ด ์„œ๋กœ ๊ณต๊ฒฉ ๊ฐ€๋Šฅํ•œ์ง€ ๊ฒ€์‚ฌํ•˜๋Š” ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜๋ฉด ๊ฒฝ์šฐ์˜ ์ˆ˜๊ฐ€ ๋งค์šฐ ์ปค์ง
  • ์™„์ „ ํƒ์ƒ‰์„ ํ•˜๋”๋ผ๋„ ์œ ๋งํ•œ ๊ฒฝ์šฐ์—์„œ๋งŒ ํƒ์ƒ‰ ๊ฐ€๋Šฅํ•˜๋„๋ก ๊ตฌํ˜„
  1. N๊ฐœ์˜ ํ€ธ์„ ๋†“๊ธฐ ์œ„ํ•ด์„œ๋Š” ๊ฐ ํ–‰๋งˆ๋‹ค 1๊ฐœ์”ฉ์˜ ํ€ธ์„ ๋†“์•„์•ผ ํ•จ → 224
  2. ํŠธ๋ฆฌ ํ˜น์€ ๊ทธ๋ž˜ํ”„ ๊ตฌ์กฐ๋กœ ํ‘œํ˜„ํ•˜๋ฉด ๋‹ค๋ฅธ ํ€ธ์„ ๋†“์„ ์œ„์น˜ ๊ณ ๋ คํ•ด์„œ ์ด์ „๊นŒ์ง€ ๋†“์•˜๋˜ ํ€ธ๋“ค๊ณผ ์ƒ์ถฉ๋˜์ง€ ์•Š๋Š” ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š” ์œ„์น˜์— ๋Œ€ํ•ด์„œ๋งŒ ์žฌ๊ท€ ํ•จ์ˆ˜ ํ˜ธ์ถœ
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(); // ํ˜„์žฌ ์œ„์น˜์—์„œ ํ€ธ ์ œ๊ฑฐ
    }
}