[백준 9663] N-Queen
2023. 4. 6. 15:23ㆍ자료구조 및 알고리즘/백준
728x90
https://www.acmicpc.net/problem/9663
9663번: N-Queen
N-Queen 문제는 크기가 N × N인 체스판 위에 퀸 N개를 서로 공격할 수 없게 놓는 문제이다. N이 주어졌을 때, 퀸을 놓는 방법의 수를 구하는 프로그램을 작성하시오.
www.acmicpc.net
N-Queen 문제 패턴이 N과 M 문제와 비슷
백트래킹 및 재귀를 쓴다는 것, isused배열을 쓴다는
그리고 isused 배열로 시간 복잡도를 O(M)에서 O(1)로 줄였다
바킹독님 코드 참고) https://blog.encrypted.gg/945
[실전 알고리즘] 0x0C강 - 백트래킹
이번에는 백트래킹을 배워보도록 하겠습니다. 백트래킹도 재귀와 더불어 많은 사람들이 고통을 호소하는 알고리즘 중 하나이지만 의외로 그 재귀적인 구조에 매료되어서 참재미를 알아버리는
blog.encrypted.gg
그래서 정답 코드는
// 바킹독님 코드 참고
// https://blog.encrypted.gg/945
#include <iostream>
using namespace std;
bool isused1[40];
bool isused2[40];
bool isused3[40];
int cnt=0;
int n;
void func(int cur){
if(cur==n){
cnt++;
return;
}
for(int i=0; i<n;i++){
if(isused1[i]||isused2[i+cur]||isused3[cur-i+n-1])
continue;
isused1[i]=1;
isused2[i+cur]=1;
isused3[cur-i+n-1]=1;
func(cur+1);
isused1[i]=0;
isused2[i+cur]=0;
isused3[cur-i+n-1]=0;
}
}
int main(void){
ios::sync_with_stdio(0);
cin.tie(0);
cin>>n;
func(0);
cout<<cnt;
}
재귀&백트래킹은 어려워...ㅠㅠ
728x90
'자료구조 및 알고리즘 > 백준' 카테고리의 다른 글
[백준 C++] 1012번 유기농 배추 (0) | 2023.07.03 |
---|---|
[백준 1182] 부분수열의 합 (0) | 2023.04.06 |
[백준 15649] N과 M (1) (0) | 2023.04.06 |
[백준 2869] 달팽이는 올라가고 싶다 (0) | 2023.04.03 |
[백준 2752] 세수정렬 (0) | 2023.04.02 |