원본 : www.acmicpc.net/problem/9663
9663번: N-Queen
N-Queen 문제는 크기가 N × N인 체스판 위에 퀸 N개를 서로 공격할 수 없게 놓는 문제이다. N이 주어졌을 때, 퀸을 놓는 방법의 수를 구하는 프로그램을 작성하시오.
www.acmicpc.net
풀이
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
public class Main {
public static int count = 0;
public static void main(String[] args) throws Exception {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(System.out));
int n = Integer.parseInt(reader.readLine());
int result[] = new int[n];
nQueenCalculation(result, 0, n);
writer.write(count + "");
writer.flush();
}
public static void nQueenCalculation(int result[], int index, int n) {
if (index == n) {
count++;
return;
}
for (int i = 0; i < n; i++) {
if (checkQueen(result, index, i)) {
result[index] = i;
nQueenCalculation(result, index + 1, n);
}
}
}
public static boolean checkQueen(int result[], int index, int x) {
for (int i = 0; i < index; i++) {
if (result[i] == x) {
return false;
}
}
for (int i = 0; i < index; i++) {
if (result[i] == (x - (index - i)) || result[i] == (x + (index - i))) {
return false;
}
}
return true;
}
}
댓글 영역