Skip to content

pseudo code#

def solve(col):
    if col == SIDE:
        return 1
    for row in range(SIDE):
        diag1_idx = col + row
        diag2_idx = row - col + SIDE - 1
        if (row_visited[diag1_idx] or
            diag1_visited[diag1_idx] or
            diag2_visited[diag2_idx]):
            continue

        visit: row_visited, diag1_visited, diag2_visited

        count += solve(col + 1)

        unvisit: row_visited, diag1_visited, diag2_visited

    return count

근데 이 방법으로는 시간초과가 발생하기 때문에 아예 다른 방식으로 접근하여야 한다. 그런데 pypy로 풀면 통과한다고 한다

신병철's idea#

등록된 모든 퀸들의 (x', y') 과 현재 주목중인 (y, x)간에 |x - x'| == |y - y'|이라면 north east 대각선 OR south east 대각선에 의해 공격당할 위치에 놓이게 된다. 이것을 가지고 문제를 풀 수도 있다.