N-Queen {boj}

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 대각선에 의해 공격당할 위치에 놓이게 된다. 이것을 가지고 문제를 풀 수도 있다.