
N-Queen 문제는 크기가 N × N인 체스판 위에 퀸 N개를 서로 공격할 수 없게 놓는 문제이다.
N이 주어졌을 때, 퀸을 놓는 방법의 수를 구하는 프로그램을 작성하시오.
첫째 줄에 N이 주어진다. (1 ≤ N < 15)
첫째 줄에 퀸 N개를 서로 공격할 수 없게 놓는 경우의 수를 출력한다.
문제 분석
1. 정보
- 크기가 N * N인 체스판에 퀸 N개를 서로 공격할 수 없게 놓는다.
2. 목표
- 퀸 N개를 놓는 방법의 수를 출력
3. 제약 조건
-
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class BOJ9663 {
static int N;
static int[] queen;
static int result = 0;
private static void solution() throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
N = Integer.parseInt(br.readLine());
queen = new int[N];
findPlace(0);
System.out.println(result);
}
static void findPlace(int cnt) {
if (cnt == N) {
result++;
return;
}
for (int i = 0; i < N; i++) {
queen[cnt] = i;
if (isAvailable(cnt)) {
findPlace(cnt + 1);
}
}
}
static boolean isAvailable(int cnt) {
for (int i = 0; i < cnt; i++) {
if (queen[cnt] == queen[i] || Math.abs(cnt - i) == Math.abs(queen[cnt] - queen[i])) {
return false;
}
}
return true;
}
public static void main(String[] args) throws IOException {
BOJ9663.solution();
}
}
