728x90
SMALL

C#

 

 

 

using System;

public class Solution {
    private int n;
    private int[] queen;
    private int answer = 0;

    public int solution(int n) {
        this.n = n;
        this.queen = new int[n];
        locate(0);
        return answer;
    }

    private void locate(int currentRow)
    {
        if (currentRow == n)
            answer++;
        else
        {
            for (int inx = 0; inx < n; inx++)
            {
                queen[currentRow] = inx;

                if (isSearch(currentRow))
                {      
                    locate(currentRow+1);
                }
            }
        }
    }

    private bool isSearch(int currentRow)
    {
        for (int inx = 0; inx < currentRow; inx++)
        {
            if (queen[inx] == queen[currentRow])
                return false;
                //직선

            if (Math.Abs(inx - currentRow) == Math.Abs(queen[inx] - queen[currentRow]))
                return false;
                //대각선
        }

        return true;
    }
}

 

 

 

 

/////////////

 

 

 

자바

 

 

 

import java.util.*;

class Solution {
    static int[] col;
    public boolean check(int here) {
        
        for(int i = 0; i < here; i++) 
        {
            if(col[here] == col[i]) return false;
            if(Math.abs(col[here] - col[i]) == here - i) return false;
        }
        return true;
    }
    public int dfs(int n, int index) {
        
        if(index == n) 
        {
            return 1;
        }
        int res = 0;
        
        for(int i = 0; i < n; i++) 
        {
            col[index] = i;
            if(check(index)) res += dfs(n, index + 1);
            col[index] = -1;
        }
        return res;
    }
    
    public int solution(int n) 
    {
        int answer = 0;
        col = new int[n];
        for(int i = 0; i < n; col[i++] = -1);
        answer = dfs(n, 0);
        return answer;
    }
}

 

 

728x90

설정

트랙백

댓글