백준

백준 9663 - Java

으엉어엉 2024. 11. 9. 11:44
728x90

 

import java.util.Scanner;

public class BJ9663 {
    private static int count = 0; //게임 경우의 수
    private static int[] board; //퀸을 놓는 배열(판) = 게임판

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt(); //판 크기
        board = new int[n];
        backTracking(0, n);
        System.out.println(count);
    }

    // N-Queen 문제 해결을 위한 백트래킹 메소드
    private static void backTracking(int row, int n) {
        if (row == n) { // 모든 행에 퀸을 놓은 경우
            count++; // 경우의수 증가
            return;
        }

        for (int col = 0; col < n; col++) {
            if (checkQueen(row, col)) { // 현재 위치가 안전한지 확인
                board[row] = col; // 퀸을 현재 위치에 놓음
                backTracking(row + 1, n); // 다음 행으로 이동
            }
        }
    }

    // 현재 위치에 퀸을 놓을 수 있는지 검사하는 메소드
    private static boolean checkQueen(int row, int col) {
        for (int i = 0; i < row; i++) {
            if (board[i] == col || Math.abs(board[i] - col) == Math.abs(i - row)) { // 같은 열에 있는 경우 | 대각선에 있는 경우
                return false; // 공격 가능 위치이므로 false 반환
            }
        }
        return true; // 안전한 위치이므로 true 반환
    }
}

 

N-Queen 에서 N은 NXN 배열을 말한다. 첫 조건은 Queen끼리 서로 공격 못하는 상황이 여야 한다. 

처음부터 해보면 Queen은 N과 1,2,3에서는 솔루션이 없다.  4X4일 때 손으로 적어보았고 처음 가능수는 16가지이고 처음부터 차근차근 넘어가야 한다.  하지만 예를 들어 1행에서 체크했던 2행이 , 2행에서 체크한 1행이랑 중복이므로 다음 행으로만 넘어가야 한다.

728x90

'백준' 카테고리의 다른 글

백준 2309 - Java  (0) 2024.11.11
백준1475 - Java  (0) 2024.11.10
백준 14501 -Java  (0) 2024.11.08
백준 2156 - Java  (0) 2024.11.07
백준 1715 - Java  (0) 2024.11.06