알고리즘/백준
[JAVA/백트래킹] 백준 9663 N-Queen
waterground
2021. 7. 11. 12:05
1. 문제
https://www.acmicpc.net/problem/9663
9663번: N-Queen
N-Queen 문제는 크기가 N × N인 체스판 위에 퀸 N개를 서로 공격할 수 없게 놓는 문제이다. N이 주어졌을 때, 퀸을 놓는 방법의 수를 구하는 프로그램을 작성하시오.
www.acmicpc.net
2. 코드
import java.util.Scanner;
// 백트래킹
public class Main {
static int answer = 0;
public static void nQueen(int[] arr, int n, int depth) {
if(n == depth) {
answer++;
return;
}
for(int i = 0; i < n; i++) { // 한 row에서 퀸을 놓을 수 있는 경우 탐색
arr[depth] = i; // 퀸 배치
if(isPossible(arr, depth)) {
nQueen(arr, n , depth + 1); // 다음 row 퀸 배치 탐색
}
}
}
public static boolean isPossible(int[] arr, int col) {
for(int i = 0; i < col; i++) { // 미리 퀸을 놓은 row들을 확인
if(arr[col] == arr[i]) // 퀸을 놓은 column이 겹치는 경우
return false;
else if(Math.abs(arr[col] - arr[i]) == Math.abs(col - i)) // 대각선에 위치한 경우
return false;
}
return true;
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int[] arr = new int[n];
nQueen(arr, n, 0);
System.out.println(answer);
}
}