알고리즘

<백준> 9663번 자바 알고리즘

changha. 2022. 1. 1. 22:46
import java.util.*;

public class Main
{   
    
    static int cnt, N;
    static int[] arr;
    
	public static void main(String[] args) {
		Scanner input = new Scanner(System.in);
		N = input.nextInt();
		arr = new int[N];
		
	    nQueen(0);
	    
	    System.out.println(cnt);
	}
	
    private static void nQueen(int next){
        if(next == N) {
            cnt++;
            return;
        }
        for(int i = 0; i < N; i++){
            arr[next] = i;
            if(Possibility(next)){
                nQueen(next + 1);
            }
        }
    }
    
    private static boolean Possibility(int col){
        // 이전 열과 같은 행일 때 
        for(int i = 0; i < col; i++){
            if(arr[col] == arr[i]) {
                return false;
            } 
            // 이전 열의 대각선에 포함 될 때 
            else if(Math.abs(col - i) == Math.abs(arr[col] - arr[i])) {
                return false;
            }
        }
        return true;

    }
}

 

배열을 2차원이 아닌 1차열로 만들었다

index => 열

value => 행