ํฌ์ŠคํŠธ

๐ŸŒ“ N-Queen

๐Ÿ’ซ N-Queen


n*n ์ฒด์ŠคํŒ์—์„œ n๊ฐœ์˜ ์—ฌ์™•์„ ์„œ๋กœ ๊ณต๊ฒฉํ•  ์ˆ˜ ์—†๋„๋ก ๋ฐฐ์น˜ํ•˜๋Š” ๋ฌธ์ œ
์–ด๋–ค ๋‘ ์—ฌ์™•๋„ ๊ฐ™์€ ํ–‰, ๊ฐ™์€ ์—ด, ๊ฐ™์€ ๋Œ€๊ฐ์„  ์ƒ์— ์œ„์น˜ํ•  ์ˆ˜ ์—†์Œ

โ†’ N x N ๋ณด๋“œ์—์„œ, ์„œ๋กœ ์˜ํ–ฅ์„ ์ค„ ์ˆ˜ ์—†๋Š” ์ฒด์Šค ์—ฌ์™• ๋ฐฐ์น˜ ๊ฒฝ์šฐ์˜ ์ˆ˜

n์ด 4์ด์ƒ์ผ ๋•Œ๋งŒ ํ•ด๊ฐ€ ์กด์žฌ

@ NQ_0000, 8-์—ฌ์™• ๋ฌธ์ œ ํ•ด๋‹ต ์˜ˆ

๐Ÿ’ซ Solve By BackTracking


๐Ÿซง ์ƒํƒœ ๊ณต๊ฐ„ ํŠธ๋ฆฌ

๊ฐ™์€ ์ค„์— ๋‘ ์—ฌ์™•์„ ๋ฐฐ์น˜ํ•  ์ˆ˜ ์—†์Œ
โ†’ ์ฒซ ๋ฒˆ์งธ ์ค„๋ถ€ํ„ฐ ํ•œ ์ค„์— ํ•œ ์—ฌ์™•๋งŒ ์žˆ์„ ์ˆ˜ ์žˆ์Œ

1~n๋ฒˆ ํ–‰ ์ˆœ์„œ๋Œ€๋กœ ์—ฌ์™•์ด ์–ด๋”” ์œ„์น˜ํ•˜๊ณ  ์žˆ๋Š”์ง€ ์ €์žฅํ•˜์—ฌ ํŠธ๋ฆฌ ๊ตฌ์„ฑ

@ NQ_0001, ๊ฒฝ์šฐ์˜ ์ˆ˜ ์ฒด์ŠคํŒ ๋ณด๋“œ ์˜ˆ์‹œ (Start์œผ๋กœ๋ถ€ํ„ฐ 4๊ฐœ์˜ ์ฒด์ŠคํŒ, โ€ฆ)

๊ฐ ์—ฌ์™•์˜ ์ขŒํ‘œ๋Š” (1, 3), (5, 3) ์ด๋Ÿฐ์‹์œผ๋กœ ํ‘œํ˜„ ๊ฐ€๋Šฅ

@ NQ_0002, Start ๋…ธ๋“œ์—์„œ ์‹œ์ž‘ํ•ด์„œ ์ญ‰ ๋‚ด๋ ค๊ฐ€๋Š”, ๊ฐ ๋…ธ๋“œ์— ์ขŒํ‘œ๋ฅผ ์ ์€ ์ƒํƒœ ๊ณต๊ฐ„ ํŠธ๋ฆฌ ์˜ˆ์‹œ
@ ์ตœ์ข… ์ƒํƒœ ์ฒด์ŠคํŒ ๋ณด๋“œ ์˜ˆ์‹œ (์ •๋‹ต์ด ์•„๋‹Œ ๊ฒฝ์šฐ๋„ ์žˆ๊ณ , ์ •๋‹ต์ธ ๊ฒฝ์šฐ๋„ ์žˆ๊ณ )

์œ ๋งํ•˜์ง€ ์•Š๋‹ค = ๊ฒน์น˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ๋‹ค = (ํ–‰์ด ๊ฒน์นœ๋‹ค, ์—ด์ด ๊ฒน์นœ๋‹ค, ๋Œ€๊ฐ์„ ์œผ๋กœ ๊ฒน์นœ๋‹ค)

@ NQ_0003, ๋‚ด๋ ค๊ฐ€๋‹ค๊ฐ€ ์œ ๋งํ•˜์ง€ ์•Š์€ ๋…ธ๋“œ์—๋Š” x ํ‘œ์‹œํ•˜๊ณ  ๋„˜์–ด๊ฐ„, ์ƒํƒœ ๊ณต๊ฐ„ ํŠธ๋ฆฌ ์˜ˆ์‹œ

n-์—ฌ์™• ๋ฌธ์ œ๋Š” ํ•ด๋‹ต์ด ์—ฌ๋Ÿฟ ์žˆ์„ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์ƒํƒœ ๊ณต๊ฐ„ ํŠธ๋ฆฌ๋ฅผ ๋ชจ๋‘ ๋’ค์ ธ์•ผ ํ•œ๋‹ค
๋’ค์ง€๋Š” ๋™์•ˆ ๊ฐ ํ–‰ (๋ฐฐ์—ด) ์˜ค๋ฅด๋ฝ ๋‚ด๋ฆฌ๋ฝํ•˜๋Š” ๋ชจ์Šต (์ƒ์ƒํ•˜์„ธ์š”)

๐Ÿซง ์•Œ๊ณ ๋ฆฌ๋“ฌ

Back-Tracking, ์‹ค์ œ๋กœ ํŠธ๋ฆฌ๋ฅผ ๋งŒ๋“ค์ง€๋Š” ์•Š๊ณ , ๊ฐ ๋ ˆ๋ฒจ์— ํ•ด๋‹นํ•˜๋Š” ์ƒํƒœ ์ •๋ณด๋ฅผ ๋ฐฐ์—ด์— ์ €์žฅํ•œ๋‹ค.

  • ๋ฐฐ์—ด์„ ์ด์šฉํ•˜์—ฌ ์ƒํƒœ ๊ณต๊ฐ„ ํŠธ๋ฆฌ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•
    • ๊ธฐ์–ตํ•ด์•ผ ํ•  ์ •๋ณด๋Š” โ€œ๊ฑธ์–ด์˜จ ๊ธธโ€
    • ๋ ˆ๋ฒจ i ๋…ธ๋“œ๋Š” i ๋ฒˆ์งธ ํ–‰๊นŒ์ง€ ๋†“์ธ i ๊ฐœ์˜ ์—ฌ์™• ์œ„์น˜๋ฅผ ๊ธฐ์–ตํ•ด์•ผ ํ•จ
      • ํ•ด๋‹น ๋…ธ๋“œ๊ฐ€ ์œ ๋งํ•˜์—ฌ ์ž์‹ ๋…ธ๋“œ๋กœ ๋‚ด๋ ค๊ฐ„๋‹ค๋ฉด, ๋‹ค์Œ ๋‹จ๊ณ„์— i + 1๊ฐœ์˜ ์—ฌ์™• ์œ„์น˜๋ฅผ ๊ธฐ์–ต
      • ํ•ด๋‹น ๋…ธ๋“œ๊ฐ€ ์œ ๋งํ•˜์ง€ ์•Š์•„ ๋ถ€๋ชจ ๋…ธ๋“œ๋กœ ๋˜๋Œ์•„๊ฐ„๋‹ค๋ฉด, ๋‹ค์Œ ๋‹จ๊ณ„์— i - 1๊ฐœ์˜ ์—ฌ์™• ์œ„์น˜๋ฅผ ๊ธฐ์–ต
์ธ๋ฑ์Šค1234
์—ด2413

@ NQ_0004

  • ๋ฐฐ์—ด ์ธ๋ฑ์Šค : ํ–‰
  • ๋ฐฐ์—ด ๊ฐ’ : ํ•ด๋‹น ํ–‰์—์„œ ๋†“์ธ ์—ฌ์™•์˜ ์—ด ์œ„์น˜

โˆด n ๊ฐœ์˜ ์—ด์„ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋Š” 1์ฐจ์› ๋ฐฐ์—ด์ด ํ•„์š”

  • ์ƒํƒœ ๊ณต๊ฐ„ ํŠธ๋ฆฌ์— ๋Œ€์‘ํ•˜๋Š” ๋ฐฐ์—ด ์ƒํƒœ
    • ๊ฐ ๋…ธ๋“œ์— ํ•ด๋‹นํ•˜๋Š” ๋ฐฐ์—ด์˜ ๊ฐ’๋“ค์€ ๋ถ€๋ถ„ํ•ด
      • ์•„๋ž˜๋กœ ์ด๋™ํ•˜๋ฉด ๋‹ค์Œ ์ธ๋ฑ์Šค์— ๊ฐ’์„ ์ €์žฅํ•˜๊ณ  ์œ„๋กœ ์ด๋™ํ•˜๋ฉด ๋งˆ์ง€๋ง‰์— ์ €์žฅ๋œ ๋ฐฐ์—ด ์›์†Œ๋Š” ๋ฎ์–ด์“ฐ๊ธฐ๊ฐ€ ๊ฐ€๋Šฅ โ†’ ์ „์ง„ํ•  ๋•Œ ๊ธฐ์–ตํ•˜๊ณ  ํ›„์ง„ํ•  ๋•Œ ๊ธฐ์–ต์—์„œ ์ง€์›€

@ NQ_0005, ์•ŒํŒŒ๊ณ  ๊ฒฝ์šฐ์˜ ์ˆ˜ ์‚ฌ์ง„

๐Ÿซง ๊ตฌํ˜„

QueenBT(0) ์„ ํ˜ธ์ถœํ•จ์œผ๋กœ์จ ์‹œ์ž‘

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
void QueenBT(int i) // ๋…ธ๋“œ๊ฐ€ ์•„๋‹ˆ๋ผ ๋ ˆ๋ฒจ, ๋ ˆ๋ฒจ์— ๋Œ€ํ•œ ์ฒ˜๋ฆฌ
{
	if (!Promising(i)) // ์œ ๋งํ•˜์ง€ ์•Š์œผ๋ฉด ํŒจ์Šค
		return;

	// ๋งˆ์ง€๋ง‰ ํ–‰์ด๋ฉด ๋
	// ์™œ ๋ฐ”๋กœ ๋์ด๋ƒ๋ฉด, ์œ ๋งํ•œ ๋…ธ๋“œ์— ๋Œ€ํ•ด์„œ๋งŒ ๊ฒ€์‚ฌ๋ฅผ ํ•˜๋‹ˆ๊นŒ (์œ„์—์„œ ๊ฒ€์‚ฌ)
	if (i == n) 
	{
		OutputSolution(i);
	}
	// ๋งˆ์ง€๋ง‰ ๋ ˆ๋ฒจ์ด ์•„๋‹ˆ๋ฉด
	// ์ž์‹ ๋…ธ๋“œ๋“ค์— ๋Œ€ํ•ด์„œ ๊ฒ€์‚ฌ
	else
	{
		for (int col = 1; col <= n; col++)
		{
			column[i + 1] = col;
			QueenBT(i + 1);
		}
	}
}

bool Promising(int i)
{
	// ์œ ๋งํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐ
	// 1. ๊ฐ™์€ ํ–‰ : ์•Œ๊ณ ๋ฆฌ๋“ฌ ์ƒ ๊ฒฝ์šฐ ์—†์Œ
	// 2. ๊ฐ™์€ ์—ด : column[i] == column[j]
	// 3. ๊ฐ™์€ ๋Œ€๊ฐ์„  :
	// ์„œ๋กœ๋ฅผ ์ž‡๋Š” ์„ ๋ถ„์˜ ๊ธฐ์šธ๊ธฐ๊ฐ€ 1 ๋˜๋Š” -1 = x ์ฐจ์ด ์ ˆ๋Œ“๊ฐ’๊ณผ y ์ฐจ์ด ์ ˆ๋Œ“๊ฐ’์ด ๋˜‘๊ฐ™์Œ
	for (int j = 0; j < i; j++)
	{
		if (column[i] == column[j] || Math.Abs(column[i] - column[j]) == i - j)
			return false;
	}
	return true;
}

๐Ÿซง ๋ถ„์„

์ƒํƒœ ๊ณต๊ฐ„ ํŠธ๋ฆฌ์˜ ๋…ธ๋“œ ์ˆ˜

\[1 + n + n^2 + ... + n^n = {(n^{n+1} - 1) \over (n-1)}\]

์•Œ๊ณ ๋ฆฌ๋“ฌ ์‹œ๊ฐ„์€, ์ƒํƒœ ๊ณต๊ฐ„ ํŠธ๋ฆฌ์˜ ๋…ธ๋“œ ์ˆ˜์— ๋น„๋ก€ (์ตœ์•…์˜ ๊ฒฝ์šฐ ์ƒํƒœ ๊ณต๊ฐ„์˜ ๋ชจ๋“  ๋…ธ๋“œ๋ฅผ ๋ฐฉ๋ฌธ)
4-Queen : 341๊ฐœ, 8-Queen : 19,173,961๊ฐœ

์œ ๋งํ•œ ๋…ธ๋“œ ์ˆ˜ ์ตœ๋Œ€/์ƒํ•œ

\[1 + n + n(n-1) + n(n-1)(n-2) + ... + n!\]

๊ฐ™์€ ์—ด์— ๋‘ ์—ฌ์™•์„ ๋ฐฐ์น˜ํ•  ์ˆ˜ ์—†์œผ๋ฏ€๋กœ, ์ƒํƒœ ๊ณต๊ฐ„ ํŠธ๋ฆฌ์—์„œ ๋ ˆ๋ฒจ์ด ํ•˜๋‚˜์”ฉ ์ฆ๊ฐ€ํ• ์ˆ˜๋ก ์œ ๋งํ•œ ๋…ธ๋“œ์˜ ์ˆ˜๋Š” ํ•˜๋‚˜์”ฉ ์ค„์–ด๋“ฆ.
4-Queen : ์ตœ๋Œ€ 65๊ฐœ, 8-Queen : ์ตœ๋Œ€ 109,601๊ฐœ

์‹ค์ œ ๋ฐฉ๋ฌธํ•˜๋Š” ๋…ธ๋“œ์˜ ์ˆ˜ (N-Queen)

nDFS (๋ชจ๋“  ๋…ธ๋“œ ์ˆ˜)Back-Tracking (์‹ค์ œ ๋ฐฉ๋ฌธ ๋…ธ๋“œ ์ˆ˜)์œ ๋งํ•œ ๋…ธ๋“œ ์ˆ˜
43416117
819,173,96115,7212,057
129.74 x 10^121.01 x 10^78.57 x 10^5

๐Ÿ’ซ Solve By Genetic-Alogrithms


์œ ์ „ ์•Œ๊ณ ๋ฆฌ๋“ฌ์„ ๋ฌธ์ œ์— ์ ์šฉํ•˜๋Š” ๊ณผ์ •

  1. ์ธ์ฝ”๋”ฉ Encoding, ์ ํ•ฉ๋„ ํ•จ์ˆ˜
    • ๋ฌธ์ œ๋ฅผ ์ปดํ“จํ„ฐ๊ฐ€ ์ดํ•ดํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ โ†’ ๊ฐ ์—ฌ์™•์˜ ์ขŒํ‘œ๋ฅผ ๋ฐฐ์—ด๋กœ ์ €์žฅ
    • ์ ํ•ฉ๋„ ํ•จ์ˆ˜ โ†’ ๊ฐ ์—ฌ์™•์ด ๋‹ค๋ฅธ ์—ฌ์™•๊ณผ ๊ฐ€๋กœ, ์„ธ๋กœ, ๋Œ€๊ฐ์„ ์œผ๋กœ ๋งŒ๋‚˜๋Š” ์ง€
  2. ๋ชจ์ง‘๋‹จ ๊ตฌ์„ฑ
  3. ์ ํ•ฉ๋„ ํ‰๊ฐ€
    • ์ ํ•ฉ๋„ ํ•จ์ˆ˜๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ๊ณ„์‚ฐํ•œ ์ ์ˆ˜
    • ๊ฐ Solution์˜ ์ ์ˆ˜๋ฅผ ์ ์ˆ˜ ์ดํ•ฉ์œผ๋กœ ๋‚˜๋ˆˆ ๋น„์œจ์„ ๋ฐ”ํƒ•์œผ๋กœ ์ž„์˜์˜ Solution ์„ ํƒ
  4. ์„ ํƒ (- ์žฌ์ƒ์‚ฐ์„ ํ•˜๊ธฐ ์œ„ํ•ด)
    • ์žฌ์ƒ์‚ฐ โ†’ ๊ต์ฐจ, ๋Œ์—ฐ๋ณ€์ด
    • i.e. ๋‹ค๋ฅธ Solution๊ณผ ์ผ์ • ๋ฒ”์œ„ ์—ฌ์™•์˜ ์ขŒํ‘œ ๊ต์ฒด, ํŠน์ • ์—ฌ์™• ์ขŒํ‘œ ๋ณ€ํ™”
  5. ๋‹ต์„ ์ฐพ์„ ๋•Œ ๊นŒ์ง€ ๋ฐ˜๋ณต
์ด ๊ธฐ์‚ฌ๋Š” ์ €์ž‘๊ถŒ์ž์˜ CC BY 4.0 ๋ผ์ด์„ผ์Šค๋ฅผ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค.