728x90

๐Ÿ”— ๋ฌธ์ œ ๋งํฌ

N-Queen

 

๐Ÿ”Ž ๋ฌธ์ œ ํ’€์ด

๋ฐฑ์ค€ 'N๊ณผ M' 4๋ฌธ์ œ๋ฅผ ํ†ตํ•ด ๋ฐฑํŠธ๋ž˜ํ‚น ์›๋ฆฌ๋ฅผ ์กฐ๊ธˆ ์ดํ•ดํ•˜๊ฒŒ ๋˜์—ˆ๊ณ  ,, ๊ทธ ์œ ๋ช…ํ•œ (?) N-Queen ๋ฌธ์ œ๋ฅผ ๋„์ „ํ–ˆ๋‹ค.

 

ํ€ธ์€ ๊ฐ€๋กœ, ์„ธ๋กœ, ๋Œ€๊ฐ์„ ์œผ๋กœ ์ด๋™ํ•  ์ˆ˜ ์žˆ๋‹ค.

์ฆ‰, ํ€ธ์„ ์„œ๋กœ ๊ณต๊ฒฉํ•  ์ˆ˜ ์—†๊ฒŒ ๋†“๊ธฐ ์œ„ํ•ด์„œ๋Š” ํ€ธ ์œ„์น˜์˜ ๊ฐ€๋กœ, ์„ธ๋กœ, ๋Œ€๊ฐ์„ ์— ๋˜ ๋‹ค๋ฅธ ํ€ธ์ด ์กด์žฌํ•˜๋ฉด ์•ˆ ๋œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

 

ํ€ธ ์œ„์น˜ ์ขŒํ‘œ๋Š” ๋ฐฐ์—ด์„ ํ†ตํ•ด ์ €์žฅํ•œ๋‹ค.

์ฒ˜์Œ์—๋Š” x, y ์ขŒํ‘œ๊ฐ€ ๋– ์˜ฌ๋ผ 2์ฐจ์› ๋ฐฐ์—ด๋กœ ๋†“์•˜๋Š”๋ฐ

ํ’€๋‹ค๊ฐ€ ์–ด๋ ค์›Œ์„œ ์ฐพ์•„๋ณด๋‹ˆ 1์ฐจ์› ๋ฐฐ์—ด๋กœ ํ•ด๊ฒฐํ•˜๋”๋ผ ,,!

๋‚˜ ๋นผ๊ณ  ๋‹ค ์ฒœ์žฌ๊ฐ€ ํ‹€๋ฆผ์ด ์—†๋‹ค ,,

๋ฐฐ์—ด์˜ index๋ฅผ ์—ด๋กœ ๋‘๊ณ , ํ•ด๋‹น index์˜ ๊ฐ’์„ ํ–‰์œผ๋กœ ๋‘๋ฉด ๋˜๋Š” ๊ฒƒ์ด๋‹ค ,,,! 

๊ทธ๋Ÿผ ๊ฐ™์€ ํ–‰์— ์œ„์น˜ํ•˜๊ฑฐ๋‚˜ ๋Œ€๊ฐ์„ ์— ์œ„์น˜ํ•˜๋Š”์ง€์— ๋Œ€ํ•ด์„œ๋งŒ ๊ฒ€์‚ฌํ•˜๋ฉด ๋œ๋‹ค.

 

ํ€ธ์„ ๋†“์„ ์ˆ˜ ์žˆ๋‹ค๋ฉด depth์— 1์„ ์ฆ๊ฐ€์‹œ์ผœ ์žฌ๊ท€ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœ์‹œํ‚ค๊ณ ,

depth == N์ด๋ผ๋ฉด ๋ฌธ์ œ ์กฐ๊ฑด์— ๋งž๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ์ฐพ์€ ๊ฒƒ์ด๋ฏ€๋กœ count๋ฅผ 1 ์ฆ๊ฐ€ํ•œ๋‹ค.

๊ทธ๋ฆฌ๊ณ  count๋ฅผ ์ถœ๋ ฅํ•˜๋ฉด ๋œ๋‹ค.

 

 

Java ์ฝ”๋“œ

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
        
public class Main {
	static int N;
	static int[] queenPlace;
	static int count = 0;
    
	public static void main(String[] args) throws IOException {
    
    	BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    	N = Integer.parseInt(br.readLine());
    	queenPlace = new int[N];
    	findNQueen(0);	
    	System.out.println(count);
    }
    
	
    public static void findNQueen(int depth) {
    	if (depth == N) {
    		count++;
    		return;
    	}
    	
    	for (int i = 0; i < N; i++) {
    		queenPlace[depth] = i;
    		
    		if (getPossibillity(depth)) {
        		findNQueen(depth+1);
        	}
    	}
   
    }
    
    public static boolean getPossibillity(int column) {
    	for (int i = 0; i < column; i++) {
    		if (queenPlace[column] == queenPlace[i])
    			return false;
    		
    		if (Math.abs(column - i) == Math.abs(queenPlace[column] - queenPlace[i]))
    			return false;
    	}
    	
    	return true;
    }
}

 


Reference

 

[๋ฐฑ์ค€] 9663๋ฒˆ : N-Queen - JAVA [์ž๋ฐ”]

www.acmicpc.net/problem/9663 9663๋ฒˆ: N-Queen N-Queen ๋ฌธ์ œ๋Š” ํฌ๊ธฐ๊ฐ€ N × N์ธ ์ฒด์ŠคํŒ ์œ„์— ํ€ธ N๊ฐœ๋ฅผ ์„œ๋กœ ๊ณต๊ฒฉํ•  ์ˆ˜ ์—†๊ฒŒ ๋†“๋Š” ๋ฌธ์ œ์ด๋‹ค. N์ด ์ฃผ์–ด์กŒ์„ ๋•Œ, ํ€ธ์„ ๋†“๋Š” ๋ฐฉ๋ฒ•์˜ ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ

st-lab.tistory.com

 

728x90

+ Recent posts