반응형
문제
N-Queen 문제는 크기가 N × N인 체스판 위에 퀸 N개를 서로 공격할 수 없게 놓는 문제이다.
N이 주어졌을 때, 퀸을 놓는 방법의 수를 구하는 프로그램을 작성하시오.
입력
첫째 줄에 N이 주어진다. (1 ≤ N < 15)
출력
첫째 줄에 퀸 N개를 서로 공격할 수 없게 놓는 경우의 수를 출력한다.
예제 입력 1
8
예제 출력 1
92
알고리즘 분류
백트래킹(backtracking), 브루트포스 알고리즘(bruteforcing)
소스코드
import java.io.IOException;
import java.util.Scanner;
public class Main {
static int N;
static int answer = 0;
static int[][] queen;
public static void main(String[] args) throws IOException {
Scanner in = new Scanner(System.in);
N = in.nextInt();
queen = new int[N][2];
dfs(0);
System.out.println(answer);
}
public static boolean check(int depth, int y) {
for (int i = 0; i < depth; i++) {
// 수평 검사
// if (queen[i][0] == depth) return false;
// 수직 검사
if (queen[i][1] == y) return false;
// 대각선 검사
if ((queen[i][0] - depth) == (queen[i][1] - y)) return false;
if ((queen[i][0] - depth) == (y - queen[i][1])) return false;
}
return true;
}
public static void dfs(int depth) {
if (depth == N) {
answer++;
return;
}
queen[depth][0] = depth;
for (int y = 0; y < N; y++) {
if (check(depth, y)) {
queen[depth][1] = y;
dfs(depth + 1);
}
}
}
}
반응형
'코딩테스트 > 백준' 카테고리의 다른 글
JAVA 백준 1271번 엄청난 부자2 (0) | 2022.07.19 |
---|---|
JAVA 백준 12095번 스도쿠 (0) | 2022.07.18 |
JAVA 백준 15652번 N과 M (4) (0) | 2022.07.16 |
JAVA 백준 15651번 N과 M (3) (0) | 2022.07.15 |
JAVA 백준 15650번 N과 M (2) (0) | 2022.07.14 |
댓글