관리 메뉴

커리까지

[백준] 9663번 N-Queen 파이썬 본문

알고리즘/풀이

[백준] 9663번 N-Queen 파이썬

목표는 커리 2023. 1. 16. 18:07
728x90
SMALL

문제

N-Queen 문제는 크기가 N × N인 체스판 위에 퀸 N개를 서로 공격할 수 없게 놓는 문제이다.

N이 주어졌을 때, 퀸을 놓는 방법의 수를 구하는 프로그램을 작성하시오.

입력

첫째 줄에 N이 주어진다. (1 ≤ N < 15)

출력

첫째 줄에 퀸 N개를 서로 공격할 수 없게 놓는 경우의 수를 출력한다.

예제 입력 1
8
예제 출력 1
92

제출 답안


'''
1. 아이디어
- 처음에 퀸을 놓는다.
- 그 다음 행에 퀸을 놓았을 때 같은 행이 아닌지, 대각선에 겹치지 않는지 확인한다.
2. 시간 복잡도
- N!
3. 변수
- result []
- candidate []
'''

import sys
input = sys.stdin.readline

def is_avaliable(row):
    for q_row in range(row):
        if candidate[row] == candidate[q_row] or abs(candidate[row] - candidate[q_row]) == row - q_row:
            return False
    return True

def dfs(row):
    global result
    if row == n:
        result += 1
        return
    for col in range(n):
        candidate[row] = col
        if is_avaliable(row):
            dfs(row+1)

n = int(input())
result = 0
candidate = [0] * n
dfs(0)

print(result)
728x90
LIST
Comments