[백준/JAVA] 9663번: N-Queen
🔺 문제
9663번: N-Queen
N-Queen 문제는 크기가 N × N인 체스판 위에 퀸 N개를 서로 공격할 수 없게 놓는 문제이다. N이 주어졌을 때, 퀸을 놓는 방법의 수를 구하는 프로그램을 작성하시오.
www.acmicpc.net
🔺 코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
|
import java.util.*;
import java.io.*;
public class Main {
static int[] arr; // 각 인덱스가 행을 의미하는 배열
static int N;
static int cnt = 0;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
N = Integer.parseInt(br.readLine());
arr = new int[N];
nQueen(0);
System.out.println(cnt);
}
// 1. 재귀호출
private static void nQueen(int depth) { // depth : 행
if(depth == N) { // 행을 다 채우면, 카운트를 1 증가시키고 리턴
cnt++;
return;
}
for(int i = 0 ; i < N ; i++) {
arr[depth] = i; // (depth, i)에 퀸 배치
// 놓을 수 있는 위치일 경우, 재귀호출
if(isPossible(depth)) {
nQueen(depth + 1);
}
}
}
// 2. 놓을 위치가 다른 퀸으로부터 위협받는지 검사 (열과 대각선에 대해 생각해봐야함)
private static boolean isPossible(int col) { // 1차원 배열의 각 인덱스 위치 = '열'
for(int i = 0 ; i < col ; i++) {
if(arr[col] == arr[i]) { // 같은 열에 존재할 경우
return false;
}
else if(Math.abs(col - i) == Math.abs(arr[col] - arr[i])) { // 대각선 상에 놓인 경우
return false;
}
}
return true;
}
}
|
cs |
✅ 해결 아이디어
✔ 백트래킹
- 퀸, 상하좌우 및 대각선으로 거리 제한 없이 한 방향으로 이동 가능하며,
이 이동가능한 동선과 겹치지 않는 곳에 또 다른 퀸을 배치해야 함
- 각 행 별로 놓을 수 있는 위치에 있을 때 재귀호출하고, 만약 모두 배치되었다면 count하면서 경우의 수 찾아냄
🔍 체스판은 2차원 배열인데 왜 1차원 배열을 사용하는가?
-> arr의 크기가 행의 크기고, 각 인덱스에 있는 값이 열을 의미하게 함.
-> arr[depth] = i
: (depth, i)에 퀸 배치
🔺 다른 풀이들
- 2차원 배열과 방향을 활용한 풀이
백준 9663번 : N-Queen (JAVA) 문제 풀이
www.acmicpc.net/problem/9663 9663번: N-Queen N-Queen 문제는 크기가 N × N인 체스판 위에 퀸 N개를 서로 공격할 수 없게 놓는 문제이다. N이 주어졌을 때, 퀸을 놓는 방법의 수를 구하는 프로그램을 작성하시
iseunghan.tistory.com
[BOJ] 백준 9663번 N-Queen 백트래킹 (Java)
#9663 N-Queen 난이도 : 골드 5 유형 : DP / 백트래킹 9663번: N-Queen N-Queen 문제는 크기가 N × N인 체스판 위에 퀸 N개를 서로 공격할 수 없게 놓는 문제이다. N이 주어졌을 때, 퀸을 놓는 방법의 수를 구하
loosie.tistory.com
💬 느낀 점
체스 규칙을 몰라서.. 퀸이 어느 방향으로 움직일 수 있는지도 잘 몰랐다고 한다...ㅎ
코드 보고 배워서 나중에는 혼자 코드 작성할 수 있게 복습해야겠다!
1회독 | 2회독 | 3회독 | 4회독 | 5회독 |
V |
(참고)
[백준] 9663번 : N-Queen - JAVA [자바]
www.acmicpc.net/problem/9663 9663번: N-Queen N-Queen 문제는 크기가 N × N인 체스판 위에 퀸 N개를 서로 공격할 수 없게 놓는 문제이다. N이 주어졌을 때, 퀸을 놓는 방법의 수를 구하는 프로그램을 작성하시
st-lab.tistory.com
[백준] 9663번 N-Queen java
코딩테스트 문제풀이 (브루트포스) : 백트랙킹 기법을 활용하여 N*N의 판에서 N개의 퀸을 서로 공격하지 않게 놓는 경우의 수를 출력하는 문제입니다.
velog.io
[백준][JAVA알고리즘]9663번 풀이(N-Queen) - 초보도 이해하는 풀이
안녕하세요 인포돈 입니다. 백준 알고리즘 9663번 풀이입니다. * 참고사항 - 개발환경은 eclipse을 기준으로 작성되었습니다. - java언어를 이용하여 문제를 풀이합니다. - 알고리즘 문제는 풀이를 보
infodon.tistory.com