티스토리 뷰

알고리즘/BOJ

[백준] 9663 N-Queen

세진짱 2020. 1. 26. 01:47

 

유명한 N-Queen 문제다!

 

백트래킹을 통해 찾을 수 있다

 

여기서 핵심은 내가 한 행을 기준으로 보면 된다는 것이다

그럼 한 행을 잡고 그 안에서 퀸을 놓을 수 있는 열을 찾고 다음 행으로 가는 것이다

그렇게 행을 끝까지 도착하면 경우의수가 1개 증가한다!

 

소스코드

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
#include <iostream>
using namespace std;
int n,ans;
bool check[22][22];
int dx[2= {-1,-1};
int dy[2= {-1,1};
 
bool inner(int x,int y){
    return (0<=&& x<&& 0<=&& y<n);
}
bool can(int x,int y){
    for(int i=0;i<n;i++){
        if(check[i][y]) return false;
    }
    for(int i=0;i<2;i++){
        int nx = x+dx[i];
        int ny = y+dy[i];
        while(inner(nx,ny)){
            if(check[nx][ny]) return false;
            nx+=dx[i]; ny+=dy[i];
        }
    }
    return true;
}
 
void solve(int pos){
    if(pos==n){
        ans++return;
    }
 
    for(int i=0;i<n;i++){
        if(can(pos,i)) {
            check[pos][i]=true;
            solve(pos+1);
            check[pos][i]=false
        }
    }
}
 
int main(){
    scanf(" %d",&n);
    solve(0);
    printf("%d\n",ans);
}
 
 

'알고리즘 > BOJ' 카테고리의 다른 글

[백준] 1062 가르침  (0) 2020.01.26
[백준] 1248 맞춰봐  (0) 2020.01.26
[백준] 1339 단어 수학  (0) 2020.01.25
[백준] 2529 부등호  (0) 2020.01.25
[백준] 14002 가장 긴 증가하는 부분 수열 4  (0) 2020.01.25
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/05   »
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
글 보관함