๋ฌธ์
ํ์ด
#include <iostream>
#include <cstring>
using namespace std;
// ex) map[4] = 3 : 4์ด์ ์๋ ํธ์ 3ํ์ ๋์ฌ ์์ต๋๋ค.
int map[15];
int N;
// ์ด ์๋ฆฌ์ ํธ์ ๋์๋ ๋ ์ง ๊ฒ์ฌ
bool check(int idx, int n) {
for (int i = 0; i < idx; i++) {
// ํ์ผ๋ก ๊ฒน์น ์กฐ๊ฑด || ๋๊ฐ์ ์ผ๋ก ๊ฒน์น ์กฐ๊ฑด
if (n == map[i] || abs(idx - i) == abs(map[i] - n))
return false;
}
return true;
}
// ํธ์ ์ด(idx) ๋ณ๋ก ํ๋์ฉ ๋ฐฐ์น
int setQueen(int idx) {
// ๋ชจ๋ ์ด์ ์ฑ์ ๋ค๋ฉด 1 ๋ฐํ
if (idx == N)
return 1;
// ๊ฒ์ฌ ํ ๋ค์ ์ด ์ฌ๊ทํธ์ถ
int res = 0;
for (int i = 0; i < N; i++) {
if (check(idx, i)) {
map[idx] = i;
res += setQueen(idx + 1);
}
}
return res;
}
int main() {
cin >> N;
memset(map, -1, sizeof(map));
cout << setQueen(0) << endl;
return 0;
}
๋จผ์ ๊ฒฝ์ฐ๋ฅผ ์์ ํ ์ฌ๊ทํ์ํ ์ ์๋์ง, ์ด๋ค ์๋ฆฌ์ ์ํด ๊ฒฝ์ฐ๋ฅผ ์ค์ผ ์ ์๋์ง ๋ฐ์ ธ๋ณด์๋ค. ์ ์ ์๊ฐ ๋์, ํธ์ ๋์ ์ ์๋ ์กฐ๊ฑด์ ๋ช๊ฐ์ง ์ฐพ์๋๋ค
1. ํธ์ ์ฌ๋ฐฉํ๋ฐฉ์ผ๋ก ์์ง์ด๊ธฐ ๋๋ฌธ์, ๊ฐ์ ํ์ด๋ ๊ฐ์ ์ด์ ํ๋ ์ด์ ์์ ์ ์๋ค. ๋ฐ๋ผ์ "map[์ด ๋ฒํธ] = ํ ๋ฒํธ" ํ์์ ๋ฐฐ์ด์ ์ ์ธํ๊ณ ์ด ๋ฒํธ๋ฅผ 0 → N๊น์ง ์ฆ๊ฐ์ํค๋ฉฐ ํธ์ ๋๊ธฐ๋ก ํ๋ค.โ
2. ๋์ ๋ ํ๊ณผ ๋๊ฐ์ ์ ๊ฑธ๋ฆฌ์ง ์๊ฒ ๋์์ผ ํ์ผ๋ฏ๋ก, ์ด์ ์ด๋ค์ ๋ฐ๋ณต๋ฌธ์ผ๋ก ๋๋ฉฐ ์กฐ๊ฑด์ ๋น๊ตํ๋ค. ์กฐ๊ฑด์ ๋ง์ถฐ ์ฌ๊ทํ์ ํ๊ณ , ์ธ๋ฑ์ค๋ค์ด ์กฐ๊ธ ํท๊ฐ๋ ธ์ง๋ง ์งง์ ์ฝ๋๋ก ๊ตฌํํ ์ ์์๋ค. ์ธ๋ฑ์ค๋ค์ ๋ป์ด ์ข๋ ๋ช ํํ ๋๋ฌ๋๋๋ก ๋ณ์ ์ด๋ฆ์ ์ ํ๋ค๋ฉด ์๊ฐ์ ์ ์ฝํ์ ๊ฒ ๊ฐ๋ค.
โ
'๐ > ์ฝ๋ฉํ ์คํธ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์๊ณ ๋ฆฌ์ฆ] ์ฐ๊ตฌ์ (๋ฐฑ์ค, 14502) (0) | 2020.11.20 |
---|---|
[์๊ณ ๋ฆฌ์ฆ] ์ ์ ์ผ๊ฐํ (๋ฐฑ์ค, 1932) (0) | 2020.11.20 |
[์๊ณ ๋ฆฌ์ฆ] ์นด๋ผ์ถ๋ฐ์ ๋น ๋ฅธ ๊ณฑ์ (Karatsuba) (1) | 2020.07.28 |
[์๊ณ ๋ฆฌ์ฆ] ๋ถํ ์ ๋ณต(Divide & Conquer) (0) | 2020.07.28 |
[์๊ณ ๋ฆฌ์ฆ] ์์ ํ์(CLOCKSYNC) (0) | 2020.07.28 |