728x90

단계별로 풀어보기 백트래킹의 5단계 문제

그 유명한 N-Queens Problem이다.

 

9663번: N-Queen

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

www.acmicpc.net

이번학기 알고리즘 시간에 정말 잘 배운 문제라 쉽게 풀 수 있었다.

import java.util.Scanner;

public class Main {
    static int count = 0;
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();
        int[] col = new int[n];
        queen(col, n, 0);
        System.out.println(count);
    }

    static void queen(int[] col, int n, int num) {
        if (num == n) {
            count++;
            return;
        }
        for (int i = 0; i < n; i++) {
            if (promising(col, num, i)) {
                 col[num] = i;
                 queen(col, n, num + 1);
                 col[num] = 0;
            }
        }
    }
    static boolean promising(int[] col, int r, int c) {
        for (int i = 0; i < r; i++) {
            if(col[i] == c || Math.abs(c - col[i]) == Math.abs(r - i)) {
                return false;
            }
        }
        return true;
    }
}

728x90

'알고리즘 문제' 카테고리의 다른 글

[백준] 1260번 DFS와 BFS  (0) 2020.01.08
[백준] 1912 연속합 (미해결)  (0) 2020.01.07
[백준] 15652번 N과 M (4)  (0) 2020.01.06
[백준] 15651 N과 M (3)  (0) 2020.01.06
[백준] 15650번 N과 M (2)  (0) 2020.01.06

+ Recent posts