상세 컨텐츠

본문 제목

Baekjoon(Kotlin) - 9663. N-Queen

Problems(Kotlin)/Baekjoon

by KDLiam 2023. 9. 6. 22:04

본문

URL : https://www.acmicpc.net/problem/9663

 

9663번: N-Queen

N-Queen 문제는 크기가 N × N인 체스판 위에 퀸 N개를 서로 공격할 수 없게 놓는 문제이다. N이 주어졌을 때, 퀸을 놓는 방법의 수를 구하는 프로그램을 작성하시오.

www.acmicpc.net

 

[ RESULT ]

 

import java.io.BufferedReader
import java.io.InputStreamReader

val br = BufferedReader(InputStreamReader(System.`in`))

fun main() {
    val N = br.readLine().toInt()
    val board = Array(N) { BooleanArray(N) { false } }

    val result = NQueen(board, N, 0)
    println(result)
}

fun NQueen(board: Array<BooleanArray>, N: Int, row: Int): Int {
    if (row == N) { return 1 }

    var cnt = 0

    for (col in 0 until N) {
        if (isValid(board, N, row, col)) {
            board[row][col] = true
            cnt += NQueen(board, N, row + 1)
            board[row][col] = false
        }
    }

    return cnt
}

fun isValid(board: Array<BooleanArray>, N: Int, row: Int, col: Int): Boolean {
    for (i in 0 until row) {
        if (board[i][col]) { return false }
    }

    var i = row - 1
    var j = col - 1
    while (i >= 0 && j >= 0) {
        if (board[i][j]) { return false }
        i--
        j--
    }

    i = row - 1
    j = col + 1
    while (i >= 0 && j < N) {
        if (board[i][j]) { return false }
        i--
        j++
    }

    return true
}

 

관련글 더보기