반응형

https://programmers.co.kr/learn/courses/30/lessons/12952

 

코딩테스트 연습 - N-Queen

가로, 세로 길이가 n인 정사각형으로된 체스판이 있습니다. 체스판 위의 n개의 퀸이 서로를 공격할 수 없도록 배치하고 싶습니다. 예를 들어서 n이 4인경우 다음과 같이 퀸을 배치하면 n개의 퀸은

programmers.co.kr

 

같은 열 또는 같은 대각선이면 가지치기를 해주며 모든 경우의 수를 구해주었습니다.

#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>

int map[12] = {0};

bool isPossible(int idx, int n) {
    for(int i=0; i<idx; i++)
        if(map[i] == map[idx] || map[i] - i == map[idx] - idx || idx - i == map[i] - map[idx]) return false;
    return true;
}

int nqueen(int idx, int n) { // idx 행번호
    if(idx == n)return 1;
    int cnt = 0;
    for(int i=0; i<n; i++) {
        map[idx] = i;
        if(isPossible(idx, n))
            cnt += nqueen(idx + 1, n);
    }
    return cnt;
}

int solution(int n) {
    return nqueen(0, n);
}
반응형

+ Recent posts