1 ๋ถ„ ์†Œ์š”

๋ฐฑํŠธ๋ž˜ํ‚น์ด๋ž€?

๋ฐฑํŠธ๋ž˜ํ‚น(Back Tracking)์ด๋ž€, ํ•ด๊ฒฐ์ฑ…์„ ๊ตฌํ•˜๊ธฐ ์œ„ํ•ด ๋ชจ๋“  ๊ฐ€๋Šฅ์„ฑ์„ ์‹œ๋„ํ•ด๋ณด๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, ํ•ด๊ฒฐ์ฑ…์— ๋Œ€ํ•œ ํ›„๋ณด๊ตฐ์„ ๊ตฌ์„ฑํ•˜๊ณ  ๊ทธ ํ›„๋ณด๊ตฐ์ด ๋ฌธ์ œ์˜ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ๊ฒ€์‚ฌํ•ด๊ฐ€๋ฉฐ ํ•ด๋‹ต์„ ์ฐพ์•„๊ฐ€๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋‹ค. (Notion AI ์„ค๋ช…)
๋Œ€ํ‘œ์ ์ธ ๋ฌธ์ œ๋กœ โ€˜์Šค๋„์ฟ โ€™, โ€˜N-Queenโ€™, โ€˜์•”ํ˜ธํ•ด๋…โ€™ ๋“ฑ์ด ์žˆ๋‹ค.

์ฆ‰, ๋ฐฑํŠธ๋ž˜ํ‚น์€ ํ•ด๋ฅผ ์ฐพ๋Š” ๋„์ค‘ ๋ง‰ํžˆ๋ฉด ๋˜๋Œ์•„๊ฐ€์„œ ๋‹ค์‹œ ํ•ด๋ฅผ ์ฐพ๋Š” ๋ฐฉ์‹์ด๋‹ค.

  • ์ตœ์ ํ™” ๋ฌธ์ œ ํ˜น์€ ๊ฒฐ์ • ๋ฌธ์ œ์—์„œ ๋งŽ์ด ์‚ฌ์šฉํ•œ๋‹ค.

๋ฐฑํŠธ๋ž˜ํ‚น์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ?

for๋ฌธ์œผ๋กœ๋Š” ํ™•์ธ์ด ๋ถˆ๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ์— ์ ์šฉํ•˜๋ฉด ๋œ๋‹ค.
๋ฌด์Šจ ๋ง์ด๋ƒ? ๊นŠ์ด๊ฐ€ ๋‹ฌ๋ผ์งˆ ๋•Œ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค. (์œ ํŠœ๋ธŒ - ๊ฐœ๋ฐœ์ž ์žฅ๊ณ )

๋ฐฑํŠธ๋ž˜ํ‚น์˜ ํŠน์ง•

  • ์–ด๋–ค ๋…ธ๋“œ์˜ ์œ ๋ง์„ฑ์„ ์ ๊ฒ€ํ•œ ํ›„์— ์œ ๋งํ•˜์ง€ ์•Š๋‹ค๊ณ  ํŒ๋‹จ๋˜๋ฉด ๊ทธ ๋…ธ๋“œ์˜ ๋ถ€๋ชจ๋กœ ๋˜๋Œ์•„๊ฐ€ ๊ทธ ๋‹ค์Œ ์ž์‹ ๋…ธ๋“œ๋ฅผ ํƒ์ƒ‰ํ•œ๋‹ค.
    • ์œ ๋ง์„ฑ: ํ•ด๋‹ต์˜ ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ๋Š” ๊ฒฝ์šฐ๋ฅผ ์œ ๋งํ•˜๋‹ค๊ณ  ํ•จ.
  • ์–ด๋–ค ๋…ธ๋“œ๋ฅผ ๋ฐฉ๋ฌธํ–ˆ์„ ๋•Œ, ๊ทธ ๋…ธ๋“œ๋ฅผ ํฌํ•จํ•œ ๊ฒฝ๋กœ๊ฐ€ ํ•ด๋‹ต์ด ๋  ์ˆ˜ ์—†์œผ๋ฉด ๊ทธ ๋…ธ๋“œ๋Š” ์œ ๋งํ•˜์ง€ ์•Š๋‹ค.
  • ๊ฐ€์ง€์น˜๊ธฐ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•Ÿ. (์œ ๋งํ•˜์ง€ ์•Š์€ ๋…ธ๋“œ๊ฐ€ ํฌํ•จ๋˜๋Š” ๊ฒฝ๋กœ๋Š” ๊ณ ๋ คํ•˜์ง€ ์•Š๋Š” ๊ธฐ๋ฒ•์ž„)
  • ๊ธฐ๋ณธ์ ์œผ๋กœ ์žฌ๊ท€์˜ ์„ฑ๊ฒฉ์„ ๋„๋Š” ํ˜•ํƒœ.

๋ฐฑํŠธ๋ž˜ํ‚น๊ณผ DFS์˜ ์ฐจ์ด์ 

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

  • ์–ด๋–ค ๋…ธ๋“œ์—ฃ ์ถœ๋ฐœํ•˜๋Š” ๊ฒฝ๋กœ๊ฐ€ ๊ทธ ํ•ด๊ฒฐ์ฑ…์œผ๋กœ ์ด์–ด์งˆ ๊ฒƒ ๊ฐ™์ง€ ์•Š์œผ๋ฉด ๋” ์ด์ƒ ๊ฒฝ๋กœ๋ฅผ ํƒ์ƒ‰ํ•˜์ง€ ์•Š์Œ -> ํšŸ์ˆ˜ ๊ฐ์†Œ
  • ๋ถˆํ•„์š”ํ•œ ๊ฒฝ๋กœ์˜ ์กฐ๊ธฐ ์ฐจ๋‹จ
  • N! ๊ฐ€์ง€์˜ ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๊ฐ€์ง„ ๋ฌธ์ œ์— ๋Œ€ํ•ด ๋ฐฑํŠธ๋ž˜ํ‚น์„ ์‹œ๋„ํ•˜๋ฉด ์ผ๋ฐ˜์ ์œผ๋กœ ๊ฒฝ์šฐ์˜ ์ˆ˜๊ฐ€ ์ค„์–ด๋“ค์ง€๋งŒ, ์ตœ์•…์˜ ๊ฒฝ์šฐ์—๋Š” ์ฒ˜๋ฆฌ๊ฐ€ ๋ถˆ๊ฐ€๋Šฅํ•ด์ง
  • ๋ชจ๋“  ํ›„๋ณด๋ฅผ ๊ฒ€์‚ฌํ•˜์ง€ ์•Š์Œ

DFS

  • ๋ชจ๋“  ๊ฒฝ๋กœ๋ฅผ ์ถ”์ ํ•จ
  • N! ๊ฐ€์ง€์˜ ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๊ฐ€์ง„ ๋ฌธ์ œ์— ๋Œ€ํ•ด DFS๋ฅผ ์ด์šฉํ•˜๋ฉด ์ฒ˜๋ฆฌ๊ฐ€ ๋ถˆ๊ฐ€๋Šฅํ•จ
  • ๋ชจ๋“  ํ›„๋ณด๋ฅผ ๊ฒ€์‚ฌํ•จ

์ˆ˜๋„ ์ฝ”๋“œ

def ์žฌ๊ท€ํ•จ์ˆ˜(n):
	if ์ •๋‹ต์ด๋ฉด :
		์ถœ๋ ฅ or ์ €์žฅ
	else : ์ •๋‹ต์ด ์•„๋‹ˆ๋ฉด :
		for ๋ชจ๋“  ์ž์‹ ๋…ธ๋“œ์— ๋Œ€ํ•ด์„œ:
			if ์ •๋‹ต์— ์œ ๋งํ•˜๋‹ค๋ฉด(๋‹ต์˜ ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ์œผ๋ฉด) :
				์ž์‹๋…ธ๋“œ๋กœ์ด๋™
				์žฌ๊ท€ํ•จ์ˆ˜(n+1)
				๋ถ€๋ชจ๋…ธ๋“œ๋กœ ์ด๋™


๋ฐฑํŠธ๋ž˜ํ‚น์˜ ๊ฒฝ์šฐ, ์œ ๋ง ์กฐ๊ฑด์„ ๋”ฐ๋กœ ํ•จ์ˆ˜๋กœ ๋งŒ๋“ค์–ด์„œ, ์•„๋ž˜์™€ ๊ฐ™์ด ๊ตฌ์„ฑํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๋‹ค๊ณ  ํ•œ๋‹ค.

def ๋ฐฑํŠธ๋ž˜ํ‚น(n):
	if ์ •๋‹ต์ด๋ฉด :
		์ถœ๋ ฅ or ์ €์žฅ
	else :
		for ๋ชจ๋“  ์ž์‹ ๋…ธ๋“œ์— ๋Œ€ํ•ด :
			if ์œ ๋งํ•œ์ง€ํ™•์ธ(m) :
				์ž์‹๋…ธ๋“œ๋กœ ์ด๋™
				๋ฐฑํŠธ๋ž˜ํ‚น(n+1)
				๋ถ€๋ชจ๋…ธ๋“œ๋กœ ์ด๋™

def ์œ ๋งํ•œ์ง€ํ™•์ธ(m):
	if ์กฐ๊ฑด์— ์•ˆ๋งž์œผ๋ฉด :
		return False
	return True
์ถœ์ฒ˜: https://edder773.tistory.com/75 [๊ฐœ๋ฐœํ•˜๋Š” ์ฐจ๋ฆฌ์˜ ๊ณต๋ถ€ ์ผ๊ธฐ:ํ‹ฐ์Šคํ† ๋ฆฌ]

์ฐธ๊ณ ์ž๋ฃŒ

[ํŒŒ์ด์ฌ] ํƒ์ƒ‰ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ •๋ฆฌ - ๋ฐฑํŠธ๋ž˜ํ‚น
์ฝ”๋”ฉํ…Œ์ŠคํŠธ ์•Œ๊ณ ๋ฆฌ์ฆ˜ - 3. ๋ฐฑํŠธ๋ž˜ํ‚น

ํƒœ๊ทธ: , ,

์นดํ…Œ๊ณ ๋ฆฌ:

์—…๋ฐ์ดํŠธ:

๋Œ“๊ธ€๋‚จ๊ธฐ๊ธฐ