일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 백준
- MYSQL
- regression
- Spring
- 회귀
- Gem
- 비트겟
- Computer Science
- SECS-II
- 자바
- 스포티파이
- SECS
- Spotify Api
- SWEA
- 파이썬
- java
- SW Expert Academy
- SECS/GEM
- C++
- 프로그래머스
- modern c++
- c
- CS
- spring boot
- programmers
- Spring JPA
- Baekjoon
- spotify
- 회원가입
- python
Archives
- Today
- Total
비버놀로지
[BAEKJOON 백준] 9663 N-Queen (JAVA) 본문
728x90
https://www.acmicpc.net/problem/9663
문제
N-Queen 문제는 크기가 N × N인 체스판 위에 퀸 N개를 서로 공격할 수 없게 놓는 문제이다.
N이 주어졌을 때, 퀸을 놓는 방법의 수를 구하는 프로그램을 작성하시오.
입력
첫째 줄에 N이 주어진다. (1 ≤ N < 15)
출력
첫째 줄에 퀸 N개를 서로 공격할 수 없게 놓는 경우의 수를 출력한다.
재귀와 DP를 섞어서 문제를 해결했습니다.
재귀로 하나의 DP가 만들어질 때마다 결과값이 1씩 올라가도록 했습니다.
그리고 check를 만들어서 퀸이 겹치게 올라가지 않도록 가지치기를 해서 결과가 나오도록 작성했습니다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
private static int N;
private static int result;
private static int[] arr;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
N = Integer.parseInt(st.nextToken());
arr = new int[N];
find(0);
System.out.println(result);
}
private static void find(int cnt) { //재귀 하나 만들어질 때마다 result를 하나씩 올려줌
if (cnt == N) {
result++;
return;
}
for (int i = 0; i < arr.length; i++) {
arr[cnt] = i;
if (check(cnt)) {
find(cnt + 1);
}
}
}
private static boolean check(int col) { //같은 열이나 대각선에 있을 경우 False
for (int i = 0; i < col; i++) {
if (arr[col] == arr[i]) {
return false;
} else if (Math.abs(col - i) == Math.abs(arr[col] - arr[i])) {
return false;
}
}
return true;
}
}
728x90
'ALGORITM > JAVA' 카테고리의 다른 글
[Programmers 프로그래머스] 42627 디스크 컨트롤러 (JAVA) (0) | 2021.06.30 |
---|---|
[Programmers 프로그래머스] 42579 베스트앨범 (JAVA) (0) | 2021.06.30 |
[BAEKJOON 백준] 5430 AC (JAVA) (0) | 2021.06.29 |
[BAEKJOON 백준] 1149 RGB거리 (JAVA) (0) | 2021.06.29 |
[BAEKJOON 백준] 1932 정수 삼각형 (JAVA) (0) | 2021.06.29 |
Comments