프로그래머스 레벨2 N-Queen C#(JAVA) - 완전탐색 private void/bool
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;
}
}