728x90
https://www.acmicpc.net/problem/9663
package BKD_0x0C_BackTracking;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class BOJ_9663 {
static int N;
static int count=0;
static boolean[] visited1 = new boolean[40];
static boolean[] visited2 = new boolean[40];
static boolean[] visited3= new boolean[40];
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
N = Integer.parseInt(br.readLine());
func(0);
System.out.println(count);
}
static void func(int cur){
if(cur == N) {
count++;
return;
}
for( int i=0;i<N;i++){
if(visited1[i] || visited2[cur+i] || visited3[cur-i+N-1]) {
continue;
}
visited1[i] =true;
visited2[cur+i] = true;
visited3[cur-i+N-1] = true;
func(cur+1);
visited1[i] =false;
visited2[cur+i] = false;
visited3[cur-i+N-1] = false;
}
}
}
조건
각 행에 하나의 퀸 말이 있어야 한다.
퀸의 행동 범위
- 행 : 한 행에 한 말만 배치 할 것이기 때문에 신경 안씀
- 열 : y 좌표가 일치하는가
- 증가형태 대각선 : x+y가 같은 값인가
- 감소형태 대각선 : x-y가 같은 값인가
함수 정의
void func(cur) : cur 번째 행에 말을 배치한다.
Base Condition:
cur == N
Recursion
각 열과 대각선의 점유 상태를 나타내는 isUsed 변수를 사용
- isUsed1[y] : 열
- isUsed2[cur + y] : 증가 대각선
- isUsed3[cur-y+n-1] : 감소 대각선
(cur,i) 좌표에 퀸을 배치 가능 할 때
- 점유 상태 변경
- func(cur+1) 함수 호출
728x90
'🐣 알고리즘 삐약 > 💻 백준 삐약' 카테고리의 다른 글
100 삐약 : 백준 7785 | 회사에 있는 사람 [바킹독| HASH |JAVA] (0) | 2024.10.31 |
---|---|
99 삐약 : 백준 1182 | 부분 수열의 합 [바킹독| 백트래킹 |JAVA] (0) | 2024.09.15 |
97 삐약 : 백준 2448 | 별 찍기 - 11 [바킹독| 재귀 |JAVA] (1) | 2024.09.15 |
96 삐약 : 백준 2447 | 별 찍기 - 10 [바킹독| 재귀 |JAVA] (0) | 2024.09.15 |
95 삐약 : 백준 2630 | 쿼드트리 [바킹독| 재귀 |JAVA] (0) | 2024.09.11 |