[백준] N-Queen (9663)(Kotlin)
문제 설명
N-Queen 문제는 크기가 N × N인 체스판 위에 퀸 N개를 서로 공격할 수 없게 놓는 문제이다.
N이 주어졌을 때, 퀸을 놓는 방법의 수를 구하는 프로그램을 작성하시오.
입력
첫째 줄에 N이 주어진다. (1 ≤ N < 15)
출력
첫째 줄에 퀸 N개를 서로 공격할 수 없게 놓는 경우의 수를 출력한다.
테스트 케이스1
입력 | 출력 |
---|---|
8 | 92 |
문제 풀이1
import java.io.BufferedReader
import java.io.InputStreamReader
import kotlin.math.abs
var n: Int = 0
var col: IntArray = intArrayOf()
var answer: Int = 0
fun main() = with(BufferedReader(InputStreamReader(System.`in`))) {
n = readLine().toInt()
col = IntArray(n)
for (i in 0 until n) {
col[0] = i
nQueen(i, 0)
}
println(answer)
}
fun nQueen(x: Int, y: Int) {
for (dy in 0 until y)
if (col[dy] == x || abs(x - col[dy]) == y - dy) return
if (n - 1 == y) {
answer++
return
}
for (i in 0 until n) {
col[y + 1] = i
nQueen(i, y + 1)
}
}