https://www.acmicpc.net/problem/9663
9663번: N-Queen
N-Queen 문제는 크기가 N × N인 체스판 위에 퀸 N개를 서로 공격할 수 없게 놓는 문제이다. N이 주어졌을 때, 퀸을 놓는 방법의 수를 구하는 프로그램을 작성하시오.
www.acmicpc.net
#include<iostream>
using namespace std;
int arr[15];
int n, m,row;
int answer = 0;
bool check(int row) {
for (int i = 0; i < row; i++) {
if (arr[i] == arr[row] || abs(arr[i]- arr[row]) == row - i ) {
return false;
}
}
return true;
}
void dfs(int cnt ) {
if (cnt ==n ) {
answer++;
}
else {
for (int i = 0; i < n; i++) {
arr[cnt] = i;
if (check(cnt)) {
dfs(cnt + 1);
}
}
}
}
int main() {
cin >> n ;
dfs(0);
cout << answer;
}
이 문제 파이썬에서도 비슷하세 풀었는데
어렵다 어려워 사실 배열에 위치를 저장하는 거 생각하는 것도 어려웠고
어떻게 대각선 확인하지? 하고 생각했다
가로 차이랑 세로차이가 같으면 대각선위 위치에 있다는거 생각하는게 어려웠다
파이썬으로 풀면 그냥 2차원 배열 했을 텐에 그렇게 하면 아마 시간 초과 백퍼나온다
이런한 방법이 있다는 것 꼭 인지해두자!
반응형
'코딩 > 백준 - c++' 카테고리의 다른 글
[백준] 14889번 스타트와 링크 - c++ (0) | 2022.03.22 |
---|---|
[백준] 14888번 연산자 끼워넣기 - c++ (0) | 2022.03.22 |
[백준] 15651번 N과 M (3) - c++ (0) | 2022.03.20 |
[백준] 15650번 N과 M (2) - c++ (0) | 2022.03.19 |
[백준] 15649번 N과 M (1) - c++ (0) | 2022.03.18 |