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

공학도 Lee·2023년 2월 9일
0

백준 문제 풀이

목록 보기
38/63

1. 문제


출처: 백준 9663번 N-Queen

문제에 적혀있는 힌트는 문제와 큰 상관없는 제출자의 조크 같습니다.

2. 풀이


퀸을 서로 공격할 수 없게 체스판에 둘려면, 2가지 조건을 만족해야 한다.

  1. 같은 열 값과 행 값을 가지는 퀸이 없을 것
  2. 서로의 대각선 위치에 놓여있는 퀸들이 없을 것

리스트를 하나 생성하고, 각 인덱스를 행을 표시하는 것으로, 들어있는 값을 열을 표시하는 것으로 사용한다.

1번 조건은 리스트에 들어있는 값들을 비교하면 된다.
2번 조건은 인덱스 간의 차이가 리스트에 들어있는 값들의 차이와 같은지 비교하면 된다.

Python 3로 제출할 경우, 시간 초과가 되니 PyPy3로 제출해야 한다.

3. 소스코드


num = int(input())

count = 0
chess = []

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

def queen(n):
    global count
    if n==num:
        count += 1
        return
    for i in range(num):
        chess.append(i)
        if check(n):
            queen(n+1)
        chess.pop()

queen(0)
print(count)

4. 그 외


profile
이창민, Changmin Lee

0개의 댓글