chyam

[백준] 9663번, python - N-Queen 본문

백준

[백준] 9663번, python - N-Queen

chyam_eun 2026. 3. 6. 16:12

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

# 시간초과가 나서 다른분의 풀이를 참고했다..

# 퀸끼리 서로 공격이 되는가
def Check(depth): # depth 는 현재 행 
    for i in range(depth): # i는 다른 행 
        # 열 또는 대각선에 다른 퀸이 존재?
        if board[depth] == board[i] or abs(board[depth] - board[i]) == depth - i:
            return False
    return True

# N개의 퀸을 서로 공격하지 않게 놓기 위한 dfs 탐색
def dfs(depth):
    global result

    # N개의 퀸을 서로 공격하지 않게 놓은 경우
    if depth == N:
        result += 1
        return

    # 반복문을 돌면서 퀸을 배치
    for i in range(N):
        board[depth] = i
        if Check(depth):
            dfs(depth + 1)


N = int(input())
board = [0 for i in range(N)]
result = 0

dfs(0)
print(result)