본문 바로가기

Java/SWEA

[JAVA] SWEA 2806. N-Queen

https://swexpertacademy.com/main/code/problem/problemDetail.do?problemLevel=3&contestProbId=AV7GKs06AU0DFAXB&categoryId=AV7GKs06AU0DFAXB&categoryType=CODE&problemTitle=&orderBy=RECOMMEND_COUNT&selectCodeLang=JAVA&select-1=3&pageSize=10&pageIndex=1

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com

 

 

2024.02.23 - [Java/백준] - [JAVA] 백준 9663 N-Queen

 

[JAVA] 백준 9663 N-Queen

9663번: N-Queen (acmicpc.net) 9663번: N-Queen N-Queen 문제는 크기가 N × N인 체스판 위에 퀸 N개를 서로 공격할 수 없게 놓는 문제이다. N이 주어졌을 때, 퀸을 놓는 방법의 수를 구하는 프로그램을 작성하시

juju-study.tistory.com

 

 

정답 

 

import java.util.*;


class Solution
{	
	static boolean[] flag_a; //각 행에 배치했는지 체크
	static boolean[] flag_b; // / 대각선 방향에 퀸을 배치했는지 체크
	static boolean[] flag_c; // \ 대각선 방향에 퀸을 배치했는지 체크 
	static int[] pos; //각 열에 있는 퀸의 위치
	static int answer;
	static int N; //퀸 N개를 서로 공격할 수 없게 놓는 경우의 수 
	
	//i열에 알맞은 위치에 퀸을 배치
	 static void set(int i, int n)
	    {
	        for(int j=0; j<n; j++)
	        {
	            if(flag_a[j]==false && flag_b[i+j]==false &&flag_c[i-j+(n-1)]==false) // 수정된 부분: flag_a[j]로 변경
	            {
	                pos[i]=j;
	                if(i==n-1)
	                    answer++;
	                else
	                {
	                    flag_a[j] = flag_b[i+j] = flag_c[i-j+(n-1)] = true;
	                    set(i+1,n);
	                    flag_a[j] = flag_b[i+j] = flag_c[i-j+(n-1)] = false;
	                }
	            }
	        }
	    }
	public static void main(String args[]) throws Exception
	{

		Scanner sc = new Scanner(System.in);
		int T = sc.nextInt();

		for(int tc = 1; tc <= T; tc++)
		{
			N = sc.nextInt();
			
			flag_a = new boolean[N];
	        flag_b = new boolean[2*N-1];
	        flag_c = new boolean[2*N-1];
	        pos = new int[N];
	        answer = 0;
	        
	        set(0,N);
			
			System.out.printf("#%d %d\n",tc,answer);
			

		}
	}
}