
๐ ๋ฌธ์ ๋ณด๊ธฐ - [๋ฐฑ์ค] N-Queen
N-Queen ๋ฌธ์ ๋ย ํฌ๊ธฐ๊ฐ N ร N์ธ ์ฒด์คํ ์์ ํธ N๊ฐ๋ฅผย ์๋ก ๊ณต๊ฒฉํ ์ ์๊ฒ ๋๋ย ๋ฌธ์ ์ด๋ค.
N์ด ์ฃผ์ด์ก์ ๋, ํธ์ ๋๋ ๋ฐฉ๋ฒ์ ์๋ฅผ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
์ฒซ์งธ ์ค์ N์ด ์ฃผ์ด์ง๋ค. (1 โค N < 15)
์ฒซ์งธ ์ค์ ํธ N๊ฐ๋ฅผ ์๋ก ๊ณต๊ฒฉํ ์ ์๊ฒ ๋๋ย ๊ฒฝ์ฐ์ ์๋ฅผ ์ถ๋ ฅํ๋ค.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
static int[] board;
static int count;
static int n;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
n = Integer.parseInt(br.readLine());
board = new int[n];
nQueen(0);
System.out.println(count);
}
public static void nQueen(int col) {
if (col == n) {
count++;
return;
}
for (int i = 0; i < n; i++) {
board[col] = i;
if (check(col)) {
nQueen(col + 1);
}
}
}
// ๋ฐฑํธ๋ํน ๋ฉ์๋
public static boolean check(int row) {
for (int i = 0; i < row; i++) {
if (board[i] == board[row]) { // ๊ฐ์ ํ์ผ ๋ false
return false;
}
if (Math.abs(row - i) == Math.abs(board[row] - board[i])) { // ๋๊ฐ์ ์ผ ๋ false
return false;
}
}
return true;
}
}