ํ‹ฐ์Šคํ† ๋ฆฌ ๋ทฐ

728x90
๋ฐ˜์‘ํ˜•

๋ฌธ์ œ

 

์ฝ”๋”ฉํ…Œ์ŠคํŠธ ์—ฐ์Šต - N-Queen

๊ฐ€๋กœ, ์„ธ๋กœ ๊ธธ์ด๊ฐ€ n์ธ ์ •์‚ฌ๊ฐํ˜•์œผ๋กœ๋œ ์ฒด์ŠคํŒ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ฒด์ŠคํŒ ์œ„์˜ n๊ฐœ์˜ ํ€ธ์ด ์„œ๋กœ๋ฅผ ๊ณต๊ฒฉํ•  ์ˆ˜ ์—†๋„๋ก ๋ฐฐ์น˜ํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด์„œ n์ด 4์ธ๊ฒฝ์šฐ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ€ธ์„ ๋ฐฐ์น˜ํ•˜๋ฉด n๊ฐœ์˜ ํ€ธ์€

programmers.co.kr

 

๋ฌธ์ œ ํ’€์ด

 ์•ž์„œ ๋‹ค๋ฃฌ ๋ฐฑ์ค€: 9663 N-Queen, SWEA: 2806 N-Queen๊ณผ ๋™์ผํ•œ ๋ฌธ์ œ์ด๋‹ค. Queen์˜ ๊ฒฝ์šฐ ์ƒ, ํ•˜, ์ขŒ, ์šฐ์— ๋‹ค๋ฅธ Queen์ด ์—†์–ด์•ผ ํ•˜๊ณ , ๋Œ€๊ฐ์„ ์œผ๋กœ๋„ Queen์ด ์—†์–ด์•ผ ํ•œ๋‹ค๋Š” ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜์—ฌ์•ผ ํ•œ๋‹ค.

 

 ๋”ฐ๋ผ์„œ Queen์„ ๋ฐฐ์น˜ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ๋ฅผ ํŒ๋‹จํ•˜๋Š” ๊ฒƒ์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

  • ํ–‰์˜ ๊ฒฝ์šฐ DFS๋ฅผ ํ˜ธ์ถœํ•˜๋ฉฐ ์ฆ๊ฐ€์‹œํ‚ค๋ฏ€๋กœ, ๋ณ„๋„์˜ ์ค‘๋ณตํ™•์ธ์ด ํ•„์š”ํ•˜์ง€ ์•Š๋‹ค.
  • ์—ด์˜ ๊ฒฝ์šฐ ํ•ด๋‹น ์—ด์„ ์„ ํƒํ•˜๋ฉด `set`์— ์ถ”๊ฐ€ํ•˜์—ฌ ์ค‘๋ณต์„ ํ™•์ธํ•œ๋‹ค
  • ์šฐ์ธก ์ƒ๋‹จ์—์„œ ์ขŒ์ธก ํ•˜๋‹จ์˜ ๋Œ€๊ฐ์„ ์˜ ๊ฒฝ์šฐ ํ˜„์žฌ `X + Y`๋ฅผ `set`์— ์ถ”๊ฐ€ํ•˜์—ฌ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์ขŒ์ธก ์ƒ๋‹จ์—์„œ ์šฐ์ธก ํ•˜๋‹จ์˜ ๋Œ€๊ฐ์„ ์˜ ๊ฒฝ์šฐ ํ˜„์žฌ `X - Y`๋ฅผ `set`์— ์ถ”๊ฐ€ํ•˜์—ฌ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ๋ฐฑํŠธ๋ž™ํ‚น์ด ๊ฐ€๋Šฅํ•˜๋„๋ก ๊ฐ€์ง€๋ฅผ ๋ป—์€ ํ›„์— `set`์—์„œ ๋‹ค์‹œ `remove`ํ•˜์—ฌ์•ผ ํ•œ๋‹ค.

 

์ฝ”๋“œ

answer = 0
columns, l_diagonals, r_diagonals = set(), set(), set()

def dfs(x, n):
    global answer

    if x == n:
        answer += 1
        return

    for y in range(n):
        if y in columns or x + y in l_diagonals or x - y in r_diagonals:
            continue
        columns.add(y)
        l_diagonals.add(x + y)
        r_diagonals.add(x - y)
        dfs(x + 1, n)
        columns.remove(y)
        l_diagonals.remove(x + y)
        r_diagonals.remove(x - y)

def solution(n):
    dfs(0, n)
    return answer

 

728x90
๋ฐ˜์‘ํ˜•
๋Œ“๊ธ€
๊ธ€ ๋ณด๊ด€ํ•จ
์ตœ๊ทผ์— ์˜ฌ๋ผ์˜จ ๊ธ€
์ตœ๊ทผ์— ๋‹ฌ๋ฆฐ ๋Œ“๊ธ€