My Profile

김형훈

안녕하세요.
김형훈입니다.

백준 9663 N-Queen

백준 9663 N-Queen

2022년 12월 17일

2022년 12월 17일

cpp, 완전 탐색

문제

문제

풀이

풀이

퀸의 공격 범위는 다음과 같다.

n개의 퀸을 n*n 체스판에 모두 놓기 위해서는 각각의 퀸은 모두 다른 행, 다른 열, 다른 대각선에 놓여야 한다.
각각의 가로, 세로, 대각선 영역에 대해 하나의 퀸만 올 수 있게 탐색을 진행하면 된다.

0번째 부터 n-1번째 row에 대해 각각 퀸의 col 위치를 선택하며, 조건에 부합하는 퀸을 n개 놓으면 ans값을 올려주는 방식으로 답을 구한다.

코드

코드

#include <bits/stdc++.h>
using namespace std;

int n,ans;

bool col[17];
bool upper[32];
bool lower[32];

void collect(int x){
	if(x==n){
		ans++;
		return;
	}
	for(int y=0; y<n; ++y){
		if(col[y] || upper[x+y] || lower[n-1+(x-y)]) continue;
		col[y] = upper[x+y] = lower[n-1+(x-y)] = true;
		collect(x+1);
		col[y] = upper[x+y] = lower[n-1+(x-y)] = false;
	}
}
int main()
{
	ios::sync_with_stdio(0);
	cin.tie(0);

	cin >> n;
    // 체스판의 0번째 row부터 n-1번째 row에 오는 퀸들의 col 위치를 정해줌.
	collect(0);
	cout << ans;
}

결과

결과

Copyright © 2024 Hyunghoon Kim