๐Ÿ—๏ธ Algorithm/๐ŸŸฉ ๋ฐฑ์ค€

๐ŸŸฉ [๋ฐฑ์ค€] [Python] [Gold4] 9663๋ฒˆ_N-Queen

Dbswnstjd 2023. 4. 15. 20:03

๋ฌธ์ œ

https://www.acmicpc.net/problem/9663

 

9663๋ฒˆ: N-Queen

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

www.acmicpc.net

ํ’€์ด

# ๋ฐฑ์ค€ 9663๋ฒˆ ๋ฌธ์ œ - N-Queen
import sys
input = sys.stdin.readline
n = int(input().rstrip())
answer = 0
row = [0] * n

def is_promising(x):
    for i in range(x):
        if row[x] == row[i] or abs(row[x]-row[i]) == abs(x-i):
            return False
    return True
def n_queens(x):
    global answer
    if x == n:
        answer += 1
    else:
        for i in range(n):
            row[x] = i
            if is_promising(x):
                n_queens(x+1)
n_queens(0)
print(answer)

์ด ๋ฐฉ์‹์œผ๋กœ ํ’€๋ฉด ์‹œ๊ฐ„์ดˆ๊ณผ๊ฐ€ ๋ฐœ์ƒํ•ด์„œ pypy3๋กœ ์ œ์ถœํ•ด์•ผ ํ•œ๋‹ค. 

๊ทธ๋ž˜์„œ visited๋ฅผ ๋งŒ๋“ค์–ด์„œ ์ œ์ถœํ–ˆ๋Š”๋ฐ๋„ ์‹œ๊ฐ„์ดˆ๊ณผ์ด๋‹ค.. 

import sys
input = sys.stdin.readline

def check(x):
    for i in range(x):
        if rows[x] == rows[i] or abs(rows[x] - rows[i]) == x - i:
            return False
    return True

def dfs(x):
    global cnt

    if x == n:
        cnt += 1
        return

    for i in range(n):
        if visited[i]: 
            continue

        rows[x] = i
        if check(x):
            visited[i] = True
            dfs(x+1)
            visited[i] = False

n = int(input())
rows = [0] * n
visited = [False] * n
cnt = 0

dfs(0)
print(cnt)

๋ฐฑํŠธ๋ž˜ํ‚น ๋ฌธ์ œ๋Š” ์ฒ˜์Œ์ด์–ด์„œ ์ดํ•ดํ•˜๋Š”๋ฐ ๋„ˆ๋ฌด ์–ด๋ ค์šด ๋ฌธ์ œ์˜€๋‹ค.