SWEA_D3_2806
๐ [D3_2806] N-Queen
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Solution{
// ๊ฒฐ๊ณผ - ๊ฒฝ์ฐ์ ์
static int res;
// ๋ฐฐ์ด
static int[] arr;
static int N;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
int TC = Integer.parseInt(br.readLine());
for (int T = 1; T <= TC; T++) {
sb.append("#").append(T).append(" ");
// ๋ณด๋์ ํฌ๊ธฐ
N = Integer.parseInt(br.readLine());
// ์ด์ ์์น๊ฐ ์ ์ฅ ๋ฐฐ์ด
arr = new int[N];
res = 0;
go(0);
sb.append(res).append("\n");
}
System.out.println(sb);
}
// ์ฌ๊ท - ์์ด
static void go(int row) {
// ๊ธฐ์ ์กฐ๊ฑด
if (row == N) {
// ์กฐ๊ฑด์ ์ถฉ์กฑํ ๊ฐ์ด ๋๊น์ง ๋ค์ด์์ผ๋ฏ๋ก
res++;
return;
}
for (int i = 0; i < N; i++) { // ํ ๋๋ฉด์ ์ด์ ์์น๊ฐ ์ ์ฅ, ์ฌ๊ท ํธ์ถ
arr[row] = i; // ํ ๋๋ฉด์ ์ด์ ์์น๊ฐ ์ ์ฅ
// ์กฐ๊ฑด ์ถฉ์กฑํ๋ฉด ๋ค์ ์ฌ๊ท ํธ์ถ
// ๊ฐ์ง์น๊ธฐ ์กฐ๊ฑด
if (check(row)) {
go(row + 1);
}
}
}
// ์กฐ๊ฑด ๋ฉ์๋
static boolean check(int row) {
for(int i=0; i<row; i++) {
// ๊ฐ์ ์ด์ ์์น
if(arr[row] == arr[i]) {
return false;
}
// ๋๊ฐ์ ์ ์์น
if(row-i == Math.abs(arr[row] - arr[i])) {
return false;
}
// ๊ฐ์ ํ์ ์์น
if(row == i) {
return false;
}
}
return true;
}
}
๐ค ๋์ ์๊ฐ
๋ฐฑํธ๋ํน์ ์ฐ์ตํด ๋ณผ ์ ์๋ ๋ฌธ์ ์๋ค.
ํน์ด์ ์ ํ๊ณผ์ด์ ์ด์ฐจ์ ๋ฐฐ์ด๋ก ๋ฐ์ง ์๊ณ ํ๋์ ์ผ์ฐจ๋ฐฐ์ด์ ์ด์ ์์น๊ฐ์ ๋ฃ์๋ค.
ํ๋ง๋๋ก for๋ฌธ์ ๋ณ์๋ ํ์ด ๋๊ณ ๋ฐฐ์ด ๊ฐ์ ์ด์ด ๋๋ ์๋ฆฌ์ด๋ค.
์ดํด๊ฐ ๋๋ฉด ์ฝ๋ค ์๊ฐํ๊ฒ ์ง๋ง ์ ์๋์์๋ ๊ทธ๋ฅ ์ด์ฐจ์๋ฐฐ์ด์ ์จ๋ ๊ด์ฐฎ์ ๊ฒ ๊ฐ๋ค.
๋ฌผ๋ก ๊ณต๊ฐ๋ณต์ก๋์ ์๊ฐ๋ณต์ก๋์์๋ ์ฐจ์ด๊ฐ ์๊ฒ ์ง๋ง.. N์ด ๊ทธ๋ ๊ฒ ํฌ์ง ์๋ค๋ฉด ํฌ๊ฒ ์ฐจ์ด๋ ๋์ง ์์ ๊ฒ์ด๋ผ๊ณ ์๊ฐํ๋ค.
์ ์ ๋ฌธ์ ๋ฅผ ํ๋ฉด ํ์๋ก ์๊ฐ ๋ณต์ก๋์ ๊ณต๊ฐ ๋ณต์ก๋์ ์ค์์ฑ์ ๋ํด ๋๋ผ๊ฒ ๋๋ค !!