개인 공부 후 자료를 남겨놓기 위한 목적이므로,
생략되거나 오류가 있을 수 있음을 알립니다.
본론부터 이야기하자면 Direct 배열이란,
예를 들면 2차원 이상의 배열에서 상, 하, 좌, 우 등등 방향 배열을 나타낸다.
보통 DFS, BFS 알고리즘을 사용하게 되는 경우 많이 쓰게 된다.
그럼 이 상하좌우의 합을 구하게 될 때, 어떤 식으로 구해야 할까?
일반적인 경우에는 다음과 같은 코드를 짜서 해결할 수 있다.
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
|
#include <iostream>
using namespace std;
int main() {
int map[4][4] = {
6, 6, 5, 4,
1, 2, 3, 4,
1, 1, 1, 1,
5, 4, 3, 2
};
int x , y;
cin >> x >> y;
int sum = 0;
sum += map[x - 1][y + 0]; // 왼쪽
sum += map[x + 1][y + 0]; // 오른쪽
sum += map[x + 0][y - 1]; // 아래
sum += map[x + 0][y + 1]; // 위
cout << sum;
return 0;
}
|
cs |
하지만 위 코드의 경우에는 불필요하게 sum에 관한 코드가 반복되는 것을 볼 수 있다.
이를 더욱 간단하게 리펙토링을 할 수 있는데 이 때 상하좌우 방향을 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
|
#include <iostream>
using namespace std;
int main() {
int map[4][4] = {
6, 6, 5, 4,
1, 2, 3, 4,
1, 1, 1, 1,
5, 4, 3, 2
};
int x , y;
cin >> x >> y;
int direct[4][2] = {
-1, 0,
1, 0,
0, -1,
0, 1,
};
int sum = 0;
for (int i = 0; i < 4; i++) {
int dx = x + direct[i][0];
int dy = y + direct[i][1];
sum += map[dx][dy];
}
cout << sum;
return 0;
}
|
cs |
'Develop > Cpp' 카테고리의 다른 글
[C++] STL vector (0) | 2022.06.23 |
---|---|
[C++] String 클래스 (0) | 2022.06.22 |
[Cpp] 문자열 함수 (cstring) (0) | 2022.06.22 |
[Cpp] STL (스택, 큐, 우선순위 큐) (0) | 2022.06.22 |
[Cpp] 구조체 (0) | 2022.06.21 |