📖 문제
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
💡 풀이 방식
• 백트래킹
필요 자료구조
- 1차원 int형 배열 (퀸의 위치 나타냄) ⭐
- 갯수 저장할 1차원 int형 변수
arr[i] = j : (i, j) 위치에 퀸을 둔다는 의미의 배열
- 퀸, 상하좌우 및 대각선으로 거리 제한 없이 한 방향으로 이동 가능하며, 이 이동가능한 동선과 겹치지 않는 곳에 또 다른 퀸을 배치해야 함
- 각 행 별로 놓을 수 있는 위치에 있을 때 재귀호출하고, 만약 모두 배치되었다면 count하면서 경우의 수 찾아냄
> 놓을 수 있는 위치인지 확인
→ 1) 같은 열에 존재하는지 확인하기
→ 2) 같은 대각선 상에 존재하는지 확인하기
🔺 코드
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
32
33
34
35
36
37
38
39
40
41
42
43
44
|
import java.util.*;
class Solution {
static int n;
static int answer = 0;
static int[] arr; // arr[i] = j : (i,j)에 퀸을 둔다는 의미의 배열
public int solution(int n) {
this.n = n;
arr = new int[n];
nQueen(0);
return answer;
}
private static void nQueen(int row) {
if (row == n) { // 행 다 채우면, 정답 +1하고 리턴
answer++;
return;
}
for (int i = 0; i < n; i++) {
arr[row] = i; // 🔔 (row, i) 위치에 퀸 둔다는 의미
if(isValid(row)) { // 놓을 수 있는 위치라면, 재귀 호출
nQueen(row + 1);
}
}
}
// 놓을 수 있는 위치인지 판별하는 함수 (→ 열, 대각선 확인)
private static boolean isValid(int col) {
for(int i = 0 ; i < col ; i++) {
if(arr[col] == arr[i]) // 1) 같은 열에 존재하면 안 됨
return false;
if(Math.abs(col - i) == Math.abs(arr[col] - arr[i])) // 2) 같은 대각선 상에 놓이면 안 됨
return false;
}
return true;
}
}
|
cs |
➕ 다른 풀이 방식
- 깔끔한 설명!
프로그래머스 - N Queen(Java)
백트랙킹 문제입니다. N이 주어질 때, 크기가 N*N인 이차원 배열에서 N개의 퀸이 놓여질 수 있는 경우의 수를 구하는 문제입니다. 퀸은 다음과 같은 특징을 지니고 있습니다. 하나의 퀸이 놓여진
ksb-dev.tistory.com
[프로그래머스 , 자바] Level2: N-Queen
문제분석: 길이가 N인 보드판에 N개의 퀸말을 서로 공격할수없는 상태로 만드는 형태의 갯수를 구하는문제다. 이 문제를 처음 접근할때 대부분의 사람들은 2차원 배열을 만들고 완전탐색을 진행
taehoung0102.tistory.com
💦 어려웠던 점
- 1차원 배열의 의미를 제대로 파악하지 못 하였다..
🧐 새로 알게 된 내용
2차원 배열을 1차원 배열로 압축시키기
- 배열의 idx를 행, 배열의 값을 열로 보기
1회독 | 2회독 | 3회독 | 4회독 | 5회독 |
V |
(참고)
[백준/JAVA] 9663번: N-Queen
🔺 문제 9663번: N-Queen N-Queen 문제는 크기가 N × N인 체스판 위에 퀸 N개를 서로 공격할 수 없게 놓는 문제이다. N이 주어졌을 때, 퀸을 놓는 방법의 수를 구하는 프로그램을 작성하시오. www.acmicpc.ne
bono039.tistory.com
'코테 > 프로그래머스' 카테고리의 다른 글
[프로그래머스/Level2] 2개 이하로 다른 비트 (JAVA) (0) | 2024.01.29 |
---|---|
[프로그래머스/Level3] 줄 서는 방법 (JAVA) (0) | 2024.01.27 |
[프로그래머스/Level2] 하노이의 탑 (JAVA) (0) | 2024.01.24 |
[프로그래머스/Lv. 2] 미로 탈출 (JAVA) (0) | 2024.01.24 |
[프로그래머스/Lv. 2] 가장 큰 정사각형 찾기 (JAVA) (0) | 2024.01.19 |