본문 바로가기
Beakjoon&프로그래머스/파이썬

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

by 현장 2022. 5. 22.

-Code

from sys import stdin

def check(arr, m):
    for i in range(m):
        if abs(arr[m] - arr[i]) == m - i:
            return False
    return True


def n_queen(arr, n, q):
    global result

    if n == q:
        result += 1
        return

    for i in range(q):
        arr[n] = i
        if visited[i]:
            continue
        if check(arr, n):
            visited[i] = True
            n_queen(arr, n + 1, q)
            visited[i] = False


N = int(stdin.readline())
chess = [0] * N
visited = [False] * N
result = 0
n_queen(chess, 0, N)
print(result)

처음 코드는 블로그에 써놓은 코드로 제출을 했으나 시간 초과로 틀려서 찾아보니 파이썬이 원래 시간 맞추기 힘든 문제라는 것을 알고 pypy로 제출도 해봤으나 실패를 했습니다. 그래서 더 찾아보니 if문을 하나 줄이면 pypy라도 통과한다고 해서 visited를 넣는 방법으로 해결을 했습니다.