https://school.programmers.co.kr/learn/courses/30/lessons/12952
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
- 나의 풀이
✅ 길이 n 인 정사각형에서 n개의 퀸 ➡︎ 한 줄에 하나의 퀸만 들어갈 수 있음
일차원 배열로 압축 가능 ➡︎ chessBoard = new int[n];
✅ 공격범위
- 가로, 세로
- 1차원 배열로 chessBorad를 생각했기 때문에 가로는 생각X
- chessBoard 가 [1, 3, 0, 1] 이라면, 아래 그림과 같이 세로로 공격당하게 됨
- 대각선
- 대각선은 기울기가 1
- y증가량 / x증가량 = 1 따라서, x증가량 = y증가량
- 절댓값 사용하여 |x1 - x2| = |y1 - y2|
- 나의 코드
class Solution {
private static int[] chessBoard;
int answer = 0;
public int solution(int n) {
// 길이 n 인 정사각형에서 n개의 퀸 -> 한 줄에 하나의 퀸만 들어갈 수 있음
//int[] chessBoard = new int[n]
chessBoard = new int[n];
backTracking(n, 0);
return answer;
}
public void backTracking(int n, int rowIndex) {
// 끝까지 도달
if(rowIndex == n) {
answer++;
return;
}
for(int i=0; i<n; i++) {
//퀸 위치 (rowIndex, i)
chessBoard[rowIndex] = i;
// 놓을 여부 flag
boolean flag = true;
// 이전에 놓인 퀸과 비교
for(int j=0; j<rowIndex; j++) {
// 세로로 같은 위치
if(chessBoard[rowIndex] == chessBoard[j]){
flag = false;
}
// 대각선에 위치
if(Math.abs(rowIndex-j) == Math.abs(chessBoard[rowIndex]-chessBoard[j])){
flag = false;
}
}
if(flag) {
backTracking(n, rowIndex+1);
}
}
}
}
'공부 > 알고리즘' 카테고리의 다른 글
숫자 짝꿍 (0) | 2024.11.03 |
---|---|
2019 카카오 개발자 겨울 인턴십 > 크레인 인형뽑기 게임 (0) | 2024.11.02 |
2019 KAKAO BLIND RECRUITMENT > 실패율 (1) | 2024.11.01 |
공원 산책 (0) | 2024.10.30 |
카펫 (0) | 2024.08.03 |