
소스코드:
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
public class Main {
static BufferedReader br;
static BufferedWriter bw;
static boolean[] xPick;
static boolean[] leftDown; // y + x
static boolean[] rightDown; // y - x + (n-1)
static int N;
static int result;
public static void main(String[] args) throws IOException {
br = new BufferedReader(new InputStreamReader(System.in));
bw = new BufferedWriter(new OutputStreamWriter(System.out));
N = Integer.parseInt(br.readLine());
xPick = new boolean[N];
leftDown = new boolean[N * 2 - 1];
rightDown = new boolean[N * 2 - 1];
br.close();
result = 0;
solve(0);
bw.write(result + "\n");
bw.close();
}
public static void solve(int y) {
if (y == N) {
result++;
return;
}
for (int x = 0; x < N; x++) {
int ld = y + x;
int rd = y - x + (N - 1); // 음수방지
if (xPick[x] || leftDown[ld] || rightDown[rd]) {
continue;
}
xPick[x] = leftDown[ld] = rightDown[rd] = true;
solve(y + 1);
xPick[x] = leftDown[ld] = rightDown[rd] = false;
}
}
}
글의 내용 중 잘못된 점이나 수정이 필요한 부분, 혹은 궁금한 사항이 있다면 언제든 댓글로 남겨주시면 감사하겠습니다.
여러분의 피드백은 더 나은 글을 작성하는 데 큰 도움이 됩니다. 감사합니다.
'알고리즘 > 백준' 카테고리의 다른 글
| [JAVA-자바] 11054번: 가장 긴 바이토닉 부분 수열 (0) | 2025.05.12 |
|---|---|
| [JAVA-자바] 9935번: 문자열 폭발 (0) | 2025.05.09 |
| [JAVA-자바] 5639번: 이진 검색 트리 (0) | 2025.05.08 |
| [JAVA-자바] 2448번: 별 찍기 - 11 (0) | 2025.05.05 |
| [JAVA-자바] 1987번: 알파벳 (0) | 2025.05.03 |