알고리즘
                
              [BOJ-9663] N-Queen - JAVA 풀이
                sppl24
                 2024. 12. 9. 16:03
              
              
                    
        반응형
    
    
    
  N-Queen
문제
N-Queen 문제는 크기가 N × N인 체스판 위에 퀸 N개를 서로 공격할 수 없게 놓는 문제이다.
N이 주어졌을 때, 퀸을 놓는 방법의 수를 구하는 프로그램을 작성하시오.
입력
첫째 줄에 N이 주어진다. (1 ≤ N < 15)
출력
첫째 줄에 N이 주어진다. (1 ≤ N < 15)
예제 입력
8예제 출력
92아이디어
- 대표적인 백트래킹 문제다 휘발되기 전에 정리해보자..
- 대각선에 놓을 수 없고 매 행마다 열, 대각선에 놓일수 없는지를 체크해야한다
- 어떤 영상인지는 정확히 기억은 안나지만 백트래킹을 이해하기 좋은 비유가 있었는데 도미노를 하나씩 놓고 마지막에 놓은 도미노를 넘어뜨리는걸 연상하라는 내용이었다 확실히 이미지로 기억하면 도움이 되는거 같다
JAVA 풀이
import java.io.*;
public class Main {
    static int N;
    static int cnt;
    static int[] board;
    public static void main(String[] args) throws IOException {    
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        N = Integer.parseInt(br.readLine());
        board = new int[N];
        recur(0);
        br.close();
        System.out.println(cnt);
    }
    static void recur(int queen) {
        // 갯수 확인
        if (queen == N) {
            cnt++;
            return;
        }
        for (int i = 0; i < N; i++) {
            board[queen] = i;
            if (check(queen)) {
                recur(queen + 1);
            }
        }
    }
    static boolean check(int col) {
        for (int i = 0; i < col; i++) {
            if (board[col] == board[i]) {
                return false;
            } else if (Math.abs(col - i) == Math.abs(board[col] - board[i])) {
                return false;
            }
        }
        return true;
    }
}
반응형