Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 1차원 DP
- 2차원 dp
- 99클럽
- @GeneratedValue
- @GenericGenerator
- @Transactional
- Actions
- Amazon EFS
- amazon fsx
- Android Studio
- ANSI SQL
- async/await
- AVG
- AWS
- Azure
- bind
- builder
- button
- c++
- c++ builder
- c03
- Callback
- case when
- CCW
- chat GPT
- CICD
- Collections
- Combination
- combinations
- Comparator
Archives
- Today
- Total
기록
백준_9663_N-Queen 본문
문제
풀이
파이썬으로 작성한 코드는 시간초과로 테스트를 통과하지 못했다. N의 범위가 작다보니 정답 값을 리스트에 저장해서 통과하는 방법이 가능하다. 그 이외의 다른 방법을 찾지 못해 자바로 코드를 작성하였다.
queen의 위치가 다음과 같을 때 [2, 4, 1, 3]처럼 저장할 수 있다.
1 | 1 | queen | 1 |
queen | 2 | 2 | 2 |
3 | 3 | 3 | queen |
4 | queen | 4 | 4 |
후보자 n(1~N)은 arr의 각각의 원소에 대해 조건을 만족해야 한다.
1) 같은 행에 위치하지 않는다.
-
arr = [2, 4, 1] 이라고 할때 같은 후보자n이 2, 4, 1이 아닌지 확인해야 한다.
-
n==arr[j]
2) 대각선 상에 위치하지 않는다.
- d(index)==d(queen)인지 확인해야 한다.
- Math.abs(lv-j)==Math.abs(arr[j]-n)
코드
package project;
import java.util.*;
public class Main {
public static int N = 0; // 체스판의 크기
public static int ans = 0; // 정답의 개수
public static void solve(int[] arr, int lv){
if (lv==N) { // N개의 원소가 채워졌다면
ans++; // 정답의 개수+1
return;
}
for (int n=1; n<=N; n++){
boolean check = true; // n이 모든 원소에 대해 조건을 만족하는지를 저장
for (int j=0;j<lv;j++){
if (n==arr[j] | Math.abs(lv-j)==Math.abs(arr[j]-n)){
check = false; // n이 조건을 만족하지 못함
break;
}
}
if (check==true){ // 모든 조건을 만족한다면,
arr[lv] = n; // 해당 위치에 원소를 대입하고
solve(arr, lv+1); // 재귀호출
}
}
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
N = sc.nextInt();
int[] arr = new int[20];
solve(arr, 0);
System.out.println(ans);
}
}
알고리즘
'코딩테스트 > Java' 카테고리의 다른 글
프로그래머스_Java_시소짝꿍 (0) | 2023.10.18 |
---|---|
프로그래머스_Java_테이블 해시 함수 (0) | 2023.10.11 |
프로그래머스_java_숫자 카드 나누기 (0) | 2023.10.07 |
백준_18119_단어 암기 (0) | 2020.09.01 |
Comments