코딩테스트 준비/백준

백준 9663번 파이썬 N-Queen

watervin 2022. 3. 23. 19:04

N-Queen 성공

 
시간 제한메모리 제한제출정답맞힌 사람정답 비율
10 초 128 MB 60844 30192 19820 49.048%

문제

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

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

입력

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

출력

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

예제 입력 1 복사

8

예제 출력 1 복사

92

#9663번

n = int(input()) #숫자받기

ans = 0
Chess = [0] * n #체스판?

def queen_ok(x): #퀸을 놓을 수 있는지 없는지
    for i in range(x):
        if Chess[x] == Chess[i] or abs(Chess[x] - Chess[i]) == abs(x - i):
            return False
    
    return True

def n_queens(x):
    global ans
    if x == n:
        ans += 1
        return

    else:
        for i in range(n):
            # [x, i]에 퀸을 놓겠다.
            Chess[x] = i
            if queen_ok(x):
                n_queens(x+1)

n_queens(0)
print(ans)

오늘거 모르겠어서 다른 분꺼 참고함

다들어찌그리 잘 푸시는지요...ㅠ

 

https://seongonion.tistory.com/103