알고리즘/백준

[백준]9663 N-Queen(Python)

cha_eyoon 2024. 1. 5. 13:15

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

 

9663번: N-Queen

N-Queen 문제는 크기가 N × N인 체스판 위에 퀸 N개를 서로 공격할 수 없게 놓는 문제이다. N이 주어졌을 때, 퀸을 놓는 방법의 수를 구하는 프로그램을 작성하시오.

www.acmicpc.net

 

문제 접근 

 

모르겠어서 써치

잘 이해되지 않는 해설이 있기에 논의 필요(참고(1) 링크 첨부)

 

코드
import sys
input = sys.stdin.readline
n = int(input())

answer = 0
row = [0] * n

def is_possible(x):
    for i in range(x):
        if row[x] == row[i] or abs(row[x] - row[i]) == abs(x-i):    # 같은 열에 다른 퀸이 있는 경우 or 왼,오 대각선에 다른 퀸이 있는 경우
            return False

    return True

def n_queens(x):
    global answer
    if x == n:  # 모든 퀸을 놓았다는 의미
        answer += 1
        return

    else:
        for i in range(n):
            row[x] = i  # (x,i)에 퀸을 위치, x는 행 i는 열
            if is_possible(x):  # 해당 행에 위치할 수 있다면 타고 들어감
                n_queens(x+1)

n_queens(0)
print(answer)

 

 

회고

 

이해 안 가면 우선 외우고 시작..

행과 열이 있음에도 일차원으로 풀 수 있다는게 신기했다.

row[i] = j 라면 i는 행, j는 열

 

 

참고(1) 확인

https://chanhuiseok.github.io/posts/baek-1/

 

[백준] 9663번 - N-Queen

컴퓨터/IT/알고리즘 정리 블로그

chanhuiseok.github.io

https://seongonion.tistory.com/103

 

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

문제 (링크) https://www.acmicpc.net/problem/9663 9663번: N-Queen N-Queen 문제는 크기가 N × N인 체스판 위에 퀸 N개를 서로 공격할 수 없게 놓는 문제이다. N이 주어졌을 때, 퀸을 놓는 방법의 수를 구하는 프로

seongonion.tistory.com