Lewis's Tech Keep

[백준] N-Queen 본문

Java/알고리즘

[백준] N-Queen

Lewis Seo 2021. 3. 7. 23:03

참고 : www.acmicpc.net/problem/9663

 

9663번: N-Queen

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

www.acmicpc.net

 

 - 백트래킹 문제

 - 위치상 불가능한 점을 잡는 방식을 잘 기억할 것.

(신박 y 가 같은 경우, x+y 가 같은 경우, x-y 가 같은 경우는 queen 이 위치할 수 없다)

 

더보기
import java.util.Scanner;

public class Solution {
    private static int n;
    private static boolean[] isused1 = new boolean[40]; // y
    private static boolean[] isused2 = new boolean[40]; // x+y
    private static boolean[] isused3 = new boolean[40]; // x-y + n -1
    private static int count = 0;

    // ex n = 4, m = 3
    private static void func(int  cur) {
        if(cur == n) {
            count++;
            return;
        }
        for (int i = 0; i < n; i++) {
            if(isused1[i] || isused2[cur+i] || isused3[cur-i+n-1])
                continue;
            isused1[i] = true;
            isused2[cur+i] = true;
            isused3[cur-i + n -1] = true;
            func(cur+1);
            isused1[i] = false;
            isused2[cur+i] = false;
            isused3[cur-i+n-1] = false;
        }
    }

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        n = sc.nextInt();
        func(0);
        System.out.println(count);

    }
}

'Java > 알고리즘' 카테고리의 다른 글

[백준] 스티커  (0) 2021.03.08
[백준] 부분수열의 합  (0) 2021.03.07
[백준] N과 M  (0) 2021.03.07
[백준] 1로 만들기 -2  (0) 2021.03.06
[백준] 구간 합 구하기 4  (0) 2021.03.06
Comments