본문 바로가기
Develop/Cpp

[Cpp] Direct 배열

by Tarra 2022. 6. 22.

 

 


개인 공부 후 자료를 남겨놓기 위한 목적이므로,
생략되거나 오류가 있을 수 있음을 알립니다.

 

본론부터 이야기하자면 Direct 배열이란,

예를 들면 2차원 이상의 배열에서 상, 하, 좌, 우 등등 방향 배열을 나타낸다.

 

보통 DFS, BFS 알고리즘을 사용하게 되는 경우 많이 쓰게 된다.

 

(1, 1)을 기준으로 상하좌우를 선택했을 경우

 

그럼 이 상하좌우의 합을 구하게 될 때, 어떤 식으로 구해야 할까?

 

일반적인 경우에는 다음과 같은 코드를 짜서 해결할 수 있다.

 

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= {
        6654,
        1234,
        1111,
        5432
    };
 
    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= {
        6654,
        1234,
        1111,
        5432
    };
 
    int x , y;
    cin >> x >> y;
 
    int direct[4][2= {
        -10,
        10,
        0-1,
        01,
    };
 
    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