관리 메뉴

fatalite

N-Queens / 9663번 백준 🌋🌋🌋🌋 본문

코딩 인터뷰/C++

N-Queens / 9663번 백준 🌋🌋🌋🌋

fataliteforu 2023. 8. 31. 23:50

문제 

난이도 : 골드 4

문제 분류 : 백 트래킹

 

난 바보다!!!!!

해결 방법

#include <iostream>
#include <vector>
#include <utility>
#include <cmath>
#include <queue>
#include <algorithm>
#include <deque>
#include <set>
#include <map>
#include <unordered_map>
#include <string>
#include <unordered_set>

using namespace std;

int n;
int Queen[100];
int Result = 0;
void Init() 
{
    ios::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);
}
bool IsPromise(int Line)
{

    for (int i = 0; i < Line; i++)
    {
        if (Queen[i] == Queen[Line]
            || 
            abs(Queen[i] - Queen[Line]) == abs(i - Line))
        {
            return false;
        }
        
    }
    return true;
}
void Simulate(int Line)
{
    if (Line == n)
    {
        Result++;
    }
    else
    {
        for (int CurRow = 0; CurRow < n; CurRow++)
        {
            // 순서가 중요! 일단 놓는다. 
            // 다녀오면 자연스럽게 지워진다. (다음 행으로 가므로)
            Queen[Line] = CurRow;
            if (IsPromise(Line))
            {
                Simulate(Line + 1);
            }
        }
    }

    return;

}

int main() 
{
    
    cin >> n;
    for (int i = 0; i < n; i++)
    {
        Queen[i] = -1;
    }
    Simulate(0);
    cout << Result;
}

 

'코딩 인터뷰 > C++' 카테고리의 다른 글

암호 만들기 / 1759번 백준  (0) 2023.09.04
치킨 배달 / 15686번 백준  (4) 2023.09.03
CCW - 백준 11758번  (0) 2023.07.29
이분 그래프 - 백준 1707  (0) 2023.05.22
☆ 용액 - 백준 2467  (0) 2023.04.11