[백준/코틀린] 9663번: N-Queen
골드 4
링크
풀이
퀸을 배치하기 위해서는 다음 조건을 만족해야 합니다.
- 같은 행과 열에 다른 퀸이 없어야 합니다.
- 두 개의 대각선에 다른 퀸이 없어야 합니다.
즉, 하나의 행, 열, 대각선에는 하나의 퀸만 존재할 수 있습니다.
출처: Wikipedia: Eight Queens Puzzle
행, 열, 대각선의 방문 여부를 관리하며,
백트래킹으로 N개의 퀸을 체스판에 배치합니다.
코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
val n = readln().toInt()
val colVisited = BooleanArray(n)
val diagVisited1 = BooleanArray(2 * n)
val diagVisited2 = BooleanArray(2 * n)
var ans = 0
fun backtrack(m: Int) {
if (n == m) return run { ans++ }
for (j in 0 until n) {
if (!colVisited[j] &&
!diagVisited1[j + m] &&
!diagVisited2[n + j - m]
) {
colVisited[j] = true
diagVisited1[j + m] = true
diagVisited2[n + j - m] = true
backtrack(m + 1)
colVisited[j] = false
diagVisited1[j + m] = false
diagVisited2[n + j - m] = false
}
}
}
fun main() {
backtrack(0)
println(ans)
}
This post is licensed under CC BY 4.0 by the author.