[백준] 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)
    }
}

카테고리:

업데이트: