본문 바로가기

코딩테스트(백준)

[백준] 9663 : N-Queen -JAVA - 사좋배 공유

import java.util.Scanner;
public class Main {

	static int N;
	static int cnt;
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		N = sc.nextInt();
		cnt=0;

		int[][]map = new int[N][N];
		dfs(map,0);
		System.out.println(cnt);
	}
	static void dfs(int [][]map, int line) {
		if(line==N) {
			cnt++;
			return;
		}
		for(int i=0;i<N;i++) {
			if(ispromising(map,line,i)) {
				map[line][i]=1;
				dfs(map,line+1);
				map[line][i]=0;
			}
		}
		
	}
	private static boolean ispromising(int[][]map , int row, int column) {
		//위 검사
		for(int i=row;i>=0;i--) {
			if(map[i][column]==1) {
				return false;
			}
		}
		// 왼쪽 대각 검사
		for(int i=row, j=column;i>=0&&j>=0;i--,j--) {
			if(map[i][j]==1) {
				return false;
			}
		}
		//오른쪽 대각 검사
		for(int i=row, j=column;i>=0&&j<N;i--,j++) {
			if(map[i][j]==1) {
				return false;
			}
		}
		return true;
	}

}