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

728x90
๋ฐ˜์‘ํ˜•

๋ฌธ์ œ

 

9663๋ฒˆ: N-Queen

N-Queen ๋ฌธ์ œ๋Š” ํฌ๊ธฐ๊ฐ€ N × N์ธ ์ฒด์ŠคํŒ ์œ„์— ํ€ธ N๊ฐœ๋ฅผ ์„œ๋กœ ๊ณต๊ฒฉํ•  ์ˆ˜ ์—†๊ฒŒ ๋†“๋Š” ๋ฌธ์ œ์ด๋‹ค. N์ด ์ฃผ์–ด์กŒ์„ ๋•Œ, ํ€ธ์„ ๋†“๋Š” ๋ฐฉ๋ฒ•์˜ ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

www.acmicpc.net

 

๋ฌธ์ œ ํ’€์ด

 N * N์˜ ์ฒด์ŠคํŒ์ด ์ฃผ์–ด์กŒ์„ ๋•Œ, ์„œ๋กœ ๊ณต๊ฒฉํ•  ์ˆ˜ ์—†๋„๋ก ํ€ธ์„ ๋ฐฐ์น˜ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ์ฐพ๋Š” ๋ฌธ์ œ์ด๋‹ค. ํ•ด๋‹น ๋ฌธ์ œ์˜ ๊ฒฝ์šฐ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ํŒ๋‹จํ•˜์—ฌ ๋ฐฑํŠธ๋ž™ํ‚น์„ ํ•˜๋ฉด ๋œ๋‹ค.

 

  • ๊ฐ™์€ ํ–‰ ๋˜๋Š” ์—ด์— ๋‹ค๋ฅธ ํ€ธ์ด ์กด์žฌํ•˜๋Š”๊ฐ€?
    • ํ–‰์˜ ๊ฒฝ์šฐ DFS๋ฅผ ํ†ตํ•ด ์žฌ๊ท€ํ˜ธ์ถœ์„ ํ•˜๊ฒŒ ๋˜๋ฉด ํ•˜๋‚˜์˜ ํ–‰์— ๋Œ€ํ•œ ์„ ํƒ์„ ์ง„ํ–‰ํ•˜๋ฏ€๋กœ ๋ณ„๋„๋กœ ํ™•์ธํ•  ํ•„์š”๋Š” ์—†๋‹ค.
    • ์—ด์˜ ๊ฒฝ์šฐ ์˜ˆ๋ฅผ ๋“ค์–ด, ์ฒซ๋ฒˆ์งธ ํ€ธ์˜ ์ž๋ฆฌ๊ฐ€ (0, 0)์ด๋ผ๋ฉด ๊ฐ™์€ ์—ด์— ์žˆ๋Š”์ง€ ํ™•์ธํ•ด ์ฃผ์–ด์•ผ ํ•œ๋‹ค.
  • ์šฐ์ธก ์ƒ๋‹จ์—์„œ ์ขŒ์ธก ํ•˜๋‹จ(โ†™)์˜ ๋Œ€๊ฐ์„ ์— ํ€ธ์ด ์กด์žฌํ•˜๋Š”๊ฐ€?
    • ๋ฐฐ์น˜๋œ ํ€ธ์˜ X + Y๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ ๋‹ค์Œ์— ์„ ํƒํ•œ ํ€ธ์˜ X + Y์™€ ๊ฐ™๋‹ค๋ฉด โ†™์— ์กด์žฌํ•˜๋Š” ๊ฒƒ์ด๋‹ค.
  • ์ขŒ์ธก ์ƒ๋‹จ์—์„œ ์šฐ์ธก ํ•˜๋‹จ(โ†˜)์˜ ๋Œ€๊ฐ์„ ์— ํ€ธ์ด ์กด์žฌํ•˜๋Š”๊ฐ€?
    • ๋ฐฐ์น˜๋œ ํ€ธ์˜ X - Y๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ ๋‹ค์Œ์— ์„ ํƒํ•œ ํ€ธ์˜ X - Y์™€ ๊ฐ™๋‹ค๋ฉด โ†˜์— ์กด์žฌํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

 

์ฝ”๋“œ

from sys import stdin


def dfs(x):
    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)
        columns.remove(y)
        l_diagonals.remove(x + y)
        r_diagonals.remove(x - y)


if __name__ == '__main__':
    answer = 0
    n = int(stdin.readline())
    columns, l_diagonals, r_diagonals = set(), set(), set()
    dfs(0)
    print(answer)

 `l_diagonals`๋Š” `โ†™`๋ฅผ ์˜๋ฏธํ•˜๋ฉฐ, `r_diagonals`๋Š” `โ†˜`๋ฅผ ์˜๋ฏธํ•œ๋‹ค. ๋Š๋ฆผ๋ณด ํŒŒ์ด์ฌ์œผ๋กœ๋Š” ํ†ต๊ณผํ•  ์ˆ˜ ์—†์–ด PyPy3๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ์•ผ ์‹œ๊ฐ„ ์ดˆ ๋‚ด์— ๊ฐ’์„ ๊ตฌํ•  ์ˆ˜ ์žˆ๋‹ค.

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