[๋ฐฑ์ค€ 9663] N-Queen

๋„์œคยท2023๋…„ 7์›” 25์ผ
1

์•Œ๊ณ ๋ฆฌ์ฆ˜ ํ’€์ด

๋ชฉ๋ก ๋ณด๊ธฐ
54/71

๐Ÿ”— ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ

24์ผ ์ง„ํ–‰ํ–ˆ๋˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์Šคํ„ฐ๋””์—์„œ ์นœ๊ตฌ๊ฐ€ ํ’€์ดํ•˜์—ฌ์ค€ ๋ฌธ์ œ ์นœ๊ตฌ์˜ ํ’€์ด๋ฅผ ๋“ฃ๊ณ  ์ง์ ‘ ์ƒ๊ฐํ•˜๋ฉฐ ๋‹ค์‹œ ํ•œ๋ฒˆ ํ’€์–ด๋ณด์•˜๋‹ค. ์„ค๋ช…์„ ๋“ค์„ ํ›„ ๋‚ด๊ฐ€ ๋‹ค์‹œ ๋ฌธ์ œ๋ฅผ ํ’€์–ด๋ณด๋‹ˆ ๋”์šฑ ์ดํ•ด๋„ ์ž˜ ๋˜๊ณ  ์‰ฝ๊ฒŒ ํ’€ ์ˆ˜ ์žˆ์—ˆ๋‹ค.

๋ฌธ์ œ ๋ถ„์„

๋ฐฑํŠธ๋ž˜ํ‚น์˜ ๋Œ€ํ‘œ์ ์ธ ๋ฌธ์ œ๋กœ ๋ถˆ๋ฆฌ๋Š” Nํ€ธ ๋ฌธ์ œ์ด๋‹ค.

Nํ€ธ ๋ฌธ์ œ๋Š” N*N ํฌ๊ธฐ์˜ ์ฒด์ŠคํŒ์—์„œ N๊ฐœ์˜ ํ€ธ์ด ์„œ๋กœ ๊ณต๊ฒฉํ•  ์ˆ˜ ์—†๋„๋ก ๋ฐฐ์น˜ํ•˜๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ์ฐพ์•„๋‚ด๋Š” ๋ฌธ์ œ์ด๋‹ค.

๋ฐœ์ƒ & ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์„ค๊ณ„

์นœ๊ตฌ์˜ ์„ค๋ช…๋Œ€๋กœ ๋ฐฑํŠธ๋ž˜ํ‚น์„ ์ด์šฉํ•ด๋ณด๊ธฐ๋กœ ํ•˜์˜€๋‹ค.

๊ฐ€์ง€์น˜๊ธฐ ํ˜•์‹์œผ๋กœ ํ˜„์žฌ ํ€ธ์„ ๋†“๋Š” ์ž๋ฆฌ๊ฐ€ ์œ ๋งํ•˜๋‹ค๋ฉด ๊ทธ๋Œ€๋กœ ์ง„ํ–‰ํ•ด์ฃผ์—ˆ๊ณ , ์œ ๋งํ•˜์ง€ ์•Š๋‹ค๋ฉด ์žฌ๊ท€ ํ˜•์‹์œผ๋กœ ๋‹ค์Œ ์—ด๋กœ ๋„˜์–ด๊ฐ€ ๋‹ค์‹œ ์œ ๋ง์„ฑ์„ ๊ฒ€์‚ฌํ•ด์ฃผ์—ˆ๋‹ค.

๋งˆ์ง€๋ง‰ ์นธ ๊นŒ์ง€ ๋Š๊ธฐ์ง€์•Š๊ณ  ๋„๋‹ฌํ–ˆ๋‹ค๋ฉด ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ํ•˜๋‚˜ ์ฆ๊ฐ€์‹œ์ผœ์ฃผ์—ˆ๋‹ค.

์ฝ”๋“œ

#include<iostream>
#include<cmath>

using namespace std;

int n;
int cols[15] = {};
int cnt = 0;

bool check(int r){
    for(int i = 0; i < r; i++){
        // ๊ฐ™์€ ์—ด์ธ์ง€ ๊ฒ€์‚ฌ
        if(cols[r] == cols[i])
            return false;

        // ๋Œ€๊ฐ์„  ๊ฒ€์‚ฌ
        if(abs(r - i) == abs(cols[r] - cols[i]))
            return false;
    }

    return true;
}

void FindQueen(int r){
    if(r == n){
        ++cnt;
        return;
    }

    for(int i = 0; i < n; i++){
        cols[r] = i;

        if(check(r)){
            FindQueen(r + 1);
        }
    }
}

int main(){
    ios_base::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr);

    cin >> n;

    FindQueen(0);

    cout << cnt;
}
profile
Game Client Developer

0๊ฐœ์˜ ๋Œ“๊ธ€