본문으로 바로가기

[Java] 백준9663 N-Queen

category CS/Algorithm 2017. 5. 21. 10:14

https://www.acmicpc.net/problem/9663


가로세로대각선으로 움직일 수 있는 막강한 말인 Queen을 서로 공격할 수 없는 위치에 놓는 경우의 수를 구하는 문제.


한줄에 하나의 Queen밖에 못 놓으므로 맵을 다 선언해주지 않아도 됨.

N크기의 배열을 선언한 후 재귀로 경우의 수를 구한다.

조건 1. 같은 열에 있거나

조건 2. 대각선에 위치할 경우를 제외하고 찾는다.


import java.util.Scanner;
public class Problem9663_NQueen {
static int path[] = new int[16];
static int n;
static int ans;
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
n = sc.nextInt();
for(int i=0; i<n; i++){
path[0] = i;
nQueen(i,0);
}
System.out.println(ans);
}
private static void nQueen(int x, int y) {
for(int i=0;i<y;i++){
if(path[i]==x || Math.abs(x-path[i])==y-i)
return;
}
if(y==n-1){
ans++;
return;
}
for(int i=0;i<n;i++){
path[y+1]=i;
nQueen(i,y+1);
}
}
}


'CS > Algorithm' 카테고리의 다른 글

[Algorithm] MST (최소 신장 트리)  (0) 2017.07.07
[Algorithm] TSP 세일즈맨 알고리즘  (0) 2017.06.28
[Java] 백준 2252 쉬운 위상정렬  (0) 2017.05.21
[Java] 백준 1005 위상정렬  (0) 2017.05.21
[Java] 백준 1260 DFS BFS  (0) 2017.04.07