๐Ÿ˜‰/์ฝ”๋”ฉํ…Œ์ŠคํŠธ

[์•Œ๊ณ ๋ฆฌ์ฆ˜] N-Queen (๋ฐฑ์ค€, 9663)

ruhz 2020. 11. 20. 15:32

๋ฌธ์ œ

 

9663๋ฒˆ: N-Queen

N-Queen ๋ฌธ์ œ๋Š” ํฌ๊ธฐ๊ฐ€ N × N์ธ ์ฒด์ŠคํŒ ์œ„์— ํ€ธ N๊ฐœ๋ฅผ ์„œ๋กœ ๊ณต๊ฒฉํ•  ์ˆ˜ ์—†๊ฒŒ ๋†“๋Š” ๋ฌธ์ œ์ด๋‹ค. N์ด ์ฃผ์–ด์กŒ์„ ๋•Œ, ํ€ธ์„ ๋†“๋Š” ๋ฐฉ๋ฒ•์˜ ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

www.acmicpc.net

 

 

ํ’€์ด

 

ruhz3/CodingTest

To prepare for coding test. Contribute to ruhz3/CodingTest development by creating an account on GitHub.

github.com

#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. ๋†“์„ ๋•Œ ํ–‰๊ณผ ๋Œ€๊ฐ์„ ์— ๊ฑธ๋ฆฌ์ง€ ์•Š๊ฒŒ ๋†“์•„์•ผ ํ–ˆ์œผ๋ฏ€๋กœ, ์ด์ „ ์—ด๋“ค์„ ๋ฐ˜๋ณต๋ฌธ์œผ๋กœ ๋Œ๋ฉฐ ์กฐ๊ฑด์„ ๋น„๊ตํ–ˆ๋‹ค. ์กฐ๊ฑด์— ๋งž์ถฐ ์žฌ๊ท€ํƒ์ƒ‰ ํ–ˆ๊ณ , ์ธ๋ฑ์Šค๋“ค์ด ์กฐ๊ธˆ ํ—ท๊ฐˆ๋ ธ์ง€๋งŒ ์งง์€ ์ฝ”๋“œ๋กœ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค. ์ธ๋ฑ์Šค๋“ค์˜ ๋œป์ด ์ข€๋” ๋ช…ํ™•ํžˆ ๋“œ๋Ÿฌ๋‚˜๋„๋ก ๋ณ€์ˆ˜ ์ด๋ฆ„์„ ์ •ํ–ˆ๋‹ค๋ฉด ์‹œ๊ฐ„์„ ์ ˆ์•ฝํ–ˆ์„ ๊ฒƒ ๊ฐ™๋‹ค.

โ€‹