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 | 31 |
Tags
- Programmers
- 언리얼엔진5
- NRVO
- softeer
- const
- Unreal Engine5
- DeferredRendering
- 1563
- RVO
- 백준
- C
- UE5
- 줄 세우기
- 티스토리챌린지
- RootMotion
- Frustum
- IFileDialog
- GeeksForGeeks
- winapi
- algorithm
- 2294
- 오블완
- directx
- C++
- DirectX11
- UnrealEngine5
- baekjoon
- UnrealEngine4
- 팰린드롬 만들기
- 프로그래머스
Archives
- Today
- Total
Game Develop
[Algorithm] Programmers :: N-Queen 본문
https://school.programmers.co.kr/learn/courses/30/lessons/12952
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
45
46
47
48
49
50
51
52
53
54
55
|
int queens[12] = { 0 };
int targetSize = 0;
int answer = 0;
bool check(int curY, int curX) // 윗행들의 퀸검사해서 놓을 수 있는지
{
for (int i = 0; i < curY; ++i) // 윗행들검사.
{
int prevY = i;
int prevX = queens[i];
if (prevX == curX) return false; // 같은 열에 있으니까
if (prevY - prevX == curY - curX) return false;// 5시
if (prevY + prevX == curY + curX) return false;// 7시
}
return true;
}
void DFS(int y, int count)
{
if (count == targetSize)
{
++answer;
return;
}
for (int i = 0; i < targetSize; ++i)
{
if (check(y, i)) // 놓을 수 있으면
{
queens[y] = i;
DFS(y + 1, count + 1);
}
}
}
int solution(int n)
{
targetSize = n;
for (int i = 0; i < n; ++i)
{
queens[i] = -1;
}
for (int i = 0; i < n; ++i) // 열진행
{
queens[0] = i; // 0,i 에 퀸을 뒀다는 뜻.
DFS(1, 1);
}
return answer;
}
|
cs |
복기겸 풀어본 문제.
대각선검사는 저렇게 따로 해도되고, 한번에 할 수 있는 방법도 있다.
if (abs(curRow - prevY) == abs(curCol - prevX)) return false;
'Algorithm > Programmers' 카테고리의 다른 글
[Algorithm] Programmers :: 줄 서는 방법 (0) | 2023.06.01 |
---|---|
[Algorithm] Programmers :: 점 찍기 (1) | 2023.05.27 |
[Algorithm] Programmers :: 모음사전 (0) | 2023.05.26 |
[Algorithm] Programmers :: 광물 캐기 (0) | 2023.05.25 |
[Algorithm] Programmers :: 요격 시스템 (0) | 2023.05.24 |