728x90
https://programmers.co.kr/learn/courses/30/lessons/12952?language=java
코딩테스트 연습 - N-Queen
가로, 세로 길이가 n인 정사각형으로된 체스판이 있습니다. 체스판 위의 n개의 퀸이 서로를 공격할 수 없도록 배치하고 싶습니다. 예를 들어서 n이 4인경우 다음과 같이 퀸을 배치하면 n개의 퀸은
programmers.co.kr
알고리즘 수업에서 배웠던 백트래킹 알고리즘의 기본 문제 N-Queen.
간만에 한 거라 기억이 잘 나지 않아 블로그를 참고해서 풀었다. 기존에 하던 방식이라 그런지 이해하는데 큰 어려움은 없었다.
대각선 확인하는 방법이 신박했다! 그리고 2차원 배열이 아니라 1차원 배열을 이용한 방식도. 훨씬 간단하고 편리한 방법이다!
class Solution {
int[] col;
int answer;
public int solution(int n) {
answer = 0;
for(int i = 0; i < n; i ++) {
col = new int[n];
col[0] = i;
bcktrk(n, 1);
}
return answer;
}
private void bcktrk(int max, int row) {
if(max == row) {
answer ++;
return;
}
for(int i = 0; i < max; i ++) {
col[row] = i;
if(isPossible(row))
bcktrk(max, row + 1);
}
}
private boolean isPossible(int row) {
for(int i = 0; i < row; i ++) {
if(col[i] == col[row]) return false; //윗 행 확인
if(Math.abs(i - row) == Math.abs(col[i] - col[row])) return false; //대각선 확인(행의 증가량, 열의 증가량이 같으면 대각선)
}
return true;
}
}728x90
'알고리즘 > 프로그래머스' 카테고리의 다른 글
| 프로그래머스 로또의 최고 순위와 최저 순위 (0) | 2022.04.14 |
|---|---|
| 프로그래머스 신고 결과 받기 자바 풀이 (0) | 2022.04.14 |
| 프로그래머스 K번째수 자바 풀이 (0) | 2022.03.11 |
| 프로그래머스 단어변환 자바 풀이 (0) | 2022.03.09 |
| 프로그래머스 여행경로 자바 풀이 (0) | 2022.03.08 |