본문 바로가기
알고리즘/백준

백준 9663번 - N-Queen (Java 8)

by latissimus 2022. 3. 7.

https://www.acmicpc.net/problem/9663

 

9663번: N-Queen

N-Queen 문제는 크기가 N × N인 체스판 위에 퀸 N개를 서로 공격할 수 없게 놓는 문제이다. N이 주어졌을 때, 퀸을 놓는 방법의 수를 구하는 프로그램을 작성하시오.

www.acmicpc.net

백트래킹

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main {
    static int N;
    static int[] queen;
    static int countCase = 0;

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        N = Integer.parseInt(br.readLine());
        queen = new int[N];
        dfs(0);
        System.out.println(countCase);
    }

    public static void dfs(int row) {
        //종료 : 열을 다 채우면 종료
        if (row == N) {
            countCase++;
            return;
        }

        for (int i = 0; i < N; i++) {
            queen[row] = i;
            if (isQueenable(row)) {
                dfs(row + 1);
            }
        }
    }

    public static boolean isQueenable(int row) {
        for (int i = 0; i < row; i++) {
            if (queen[row] == queen[i]) {
                return false;
            }
            if (Math.abs(row - i) == Math.abs(queen[row] - queen[i])) {
                return false;
            }
        }
        return true;
    }
}

 

참고 :

https://st-lab.tistory.com/118

https://yeongjin13.tistory.com/62

댓글