본문 바로가기
코딩테스트/백준

JAVA 백준 9663번 N-Queen

by 광고(주) 2022. 7. 17.
반응형
 
 

문제

N-Queen 문제는 크기가 N × N인 체스판 위에 퀸 N개를 서로 공격할 수 없게 놓는 문제이다.

N이 주어졌을 때, 퀸을 놓는 방법의 수를 구하는 프로그램을 작성하시오.

입력

첫째 줄에 N이 주어진다. (1 ≤ N < 15)

출력

첫째 줄에 퀸 N개를 서로 공격할 수 없게 놓는 경우의 수를 출력한다.

예제 입력 1 

8

예제 출력 1 

92

알고리즘 분류

백트래킹(backtracking), 브루트포스 알고리즘(bruteforcing)

소스코드

import java.io.IOException;
import java.util.Scanner;

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

    public static void main(String[] args) throws IOException {
        Scanner in = new Scanner(System.in);
        N = in.nextInt();
        queen = new int[N][2];
        dfs(0);
        System.out.println(answer);
    }

    public static boolean check(int depth, int y) {
        for (int i = 0; i < depth; i++) {
            // 수평 검사
//            if (queen[i][0] == depth) return false;
            // 수직 검사
            if (queen[i][1] == y) return false;
            // 대각선 검사
            if ((queen[i][0] - depth) == (queen[i][1] - y)) return false;
            if ((queen[i][0] - depth) == (y - queen[i][1])) return false;

        }
        return true;
    }

    public static void dfs(int depth) {
        if (depth == N) {
            answer++;
            return;
        }
        queen[depth][0] = depth;
        for (int y = 0; y < N; y++) {
            if (check(depth, y)) {
                queen[depth][1] = y;
                dfs(depth + 1);
            }
        }
    }
}
반응형

'코딩테스트 > 백준' 카테고리의 다른 글

JAVA 백준 1271번 엄청난 부자2  (0) 2022.07.19
JAVA 백준 12095번 스도쿠  (0) 2022.07.18
JAVA 백준 15652번 N과 M (4)  (0) 2022.07.16
JAVA 백준 15651번 N과 M (3)  (0) 2022.07.15
JAVA 백준 15650번 N과 M (2)  (0) 2022.07.14

댓글