Baekjoon 9663 (N-Queen)

Baekjoon 9663 (N-Queen)

Baekjoon 9663, 백준 9663 문제의 본인 풀이입니다!
문제는 아래의 링크에서 확인할 수 있습니다.
문제 보기

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
#include <stdio.h>
#include <stdbool.h>

int result=0, N;

// 체스판 구현. i번째 행의 퀸의 위치를 chess[i]
int chess[15];

// chess[i], chess[j]가 같은 대각선/열에 놓이면 false를 배출
bool isOkay(int line){
for(int i=1; i<line; i++) {
if(chess[i]==chess[line] || abs(chess[line]-chess[i]) == line-i)
return false;
}
return true;
}

// 뽑아야 하는 줄을 line에 입력
void QueenNum(int line){
if(line==N+1) {
result++;
return;
}

for(int i=1; i<=N; i++) {
chess[line] = i;
if(isOkay(line))
QueenNum(line+1);
}
}

int main(void) {
scanf("%d",&N);
QueenNum(1);
printf("%d",result);
}

Backtracking을 이용한 첫 번째 문제였다.
chess판을 1차원 배열로 생각하였고, 대각선에 놓이는 것을 뺄셈을 이용해 해결하였다.

Author

Yeonsang Shin

Posted on

2020-03-20

Updated on

2022-12-19

Licensed under

Comments