dev/algorithm
BOJ / 9663๋ฒ / N-Queen [Go]
crscnt
2020. 7. 23. 21:00
๐ฉ๐ป๐ป ๋ฌธ์
9663๋ฒ: N-Queen
N-Queen ๋ฌธ์ ๋ ํฌ๊ธฐ๊ฐ N × N์ธ ์ฒด์คํ ์์ ํธ N๊ฐ๋ฅผ ์๋ก ๊ณต๊ฒฉํ ์ ์๊ฒ ๋๋ ๋ฌธ์ ์ด๋ค. N์ด ์ฃผ์ด์ก์ ๋, ํธ์ ๋๋ ๋ฐฉ๋ฒ์ ์๋ฅผ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
www.acmicpc.net
โ๐ป ํ์ด
๐จ Go
package main
import (
"bufio"
"fmt"
"os"
)
var cnt int
func main() {
var n int
reader := bufio.NewReader(os.Stdin)
fmt.Fscanln(reader, &n)
var board = make([][]int, n)
for i := 0; i < n; i++ {
board[i] = make([]int, n)
}
_ = solveNQueen(board, n, 0)
fmt.Println(cnt)
}
func solveNQueen(board [][]int, n, col int) bool {
if col >= n {
cnt++
return true
}
for i := 0; i < n; i++ {
if isSafe(board, n, i, col) {
board[i][col] = 1
solveNQueen(board, n, col+1)
board[i][col] = 0
}
}
return false
}
func isSafe(board [][]int, n, row, col int) bool {
for i := 0; i < col; i++ {
if board[row][i] == 1 {
return false
}
}
for i, j := row, col; i >= 0 && j >= 0; i, j = i-1, j-1 {
if board[i][j] == 1 {
return false
}
}
for i, j := row, col; i < n && j >= 0; i, j = i+1, j-1 {
if board[i][j] == 1 {
return false
}
}
return true
}
728x90