상세 컨텐츠

본문 제목

백준 9663번

백준 알고리즘 풀이

by 발발개발 2021. 1. 8. 17:59

본문

원본 : www.acmicpc.net/problem/9663

 

9663번: N-Queen

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

www.acmicpc.net

 

풀이

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;

public class Main {
    
    public static int count = 0;
    
	public static void main(String[] args) throws Exception {

		BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
		BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(System.out));
        
        int n = Integer.parseInt(reader.readLine());
        int result[] = new int[n];
        
        nQueenCalculation(result, 0, n);
        
        writer.write(count + "");
        
        writer.flush();
    }
    
    public static void nQueenCalculation(int result[], int index, int n) {
        
        if (index == n) {
            count++;
            return;
        }
        
        for (int i = 0; i < n; i++) {
            if (checkQueen(result, index, i)) {
                result[index] = i;
                nQueenCalculation(result, index + 1, n);
            }
        }
    }
    
    public static boolean checkQueen(int result[], int index, int x) {
        for (int i = 0; i < index; i++) {
            if (result[i] == x) {
                return false;
            }
        }
        
        for (int i = 0; i < index; i++) {
            if (result[i] == (x - (index - i)) || result[i] == (x + (index - i))) {
                return false;
            }
        }
        
        return true;
    }
    
}

'백준 알고리즘 풀이' 카테고리의 다른 글

백준 14888번  (0) 2021.01.12
백준 2580번  (0) 2021.01.12
백준 15652번  (0) 2021.01.08
백준 15651번  (0) 2021.01.08
백준 15650번  (0) 2021.01.08

관련글 더보기

댓글 영역