다음과 같이 한 칸씩 돌면서 => 놓은 말이 이동 가능한 거리를 제외 하고 => 남은 칸 중 칸 한씩 채워보 것을 반복
=> N개의 말을 놓게 되면 경우의 수 count
조건1. 어떻게 재귀 할 것인지
즉, N x N인 이중배열 안의 각 칸에 순차적으로 퀸을 넣어가며, N개의 퀸을 모두 놓을 수 있는 해를 모두 구하는 방법
또한, 여기서 이중배열 대신 1차원 배열로도 해결이 가능하다.
=> 각 원소의 Index를 열(column)라고 생각하고, 원소의 값을 행(low)으로 생각하여 재귀를 반복한다.
private static void check(int nQueen) {
// N개를 채운 상태면 count 증가 후 스답
if(nQueen == N) {
count++;
return;
}
for(int i = 0 ; i < N ; i++) { // N개까지 확인할 것이며,
arr[nQueen] = i;
if(possibility(nQueen)) check(nQueen + 1); // N개 중 현재 순서의 퀸을 놓을 수 있다면, 다음 퀀 놓을자리를 다시 체크
}
}
조건2. 어떻게 칸의 중복을 파악할 것인지
1) 같은 행에 존재하는 경우 = 해당 열의 행과 방문한 열의 행이 일치하는 경우
for(int now = 0 ; now < column ; now++) {
if(arr[column] == arr[now]) return false;
}