공부/알고리즘

방향 배열(Direction Array)

명석 2024. 7. 25. 14:45

방향 배열

방향 배열은 2차원 평면에서 상하좌우 및 대각선 이동을 쉽게 구현하기 위한 배열입니다. 이를 통해 특정 좌표의 상하좌우 또는 대각선 방향으로의 이동을 간편하게 처리할 수 있습니다.

상하좌우 방향 배열

  • 상: dy[0] = -1, dx[0] = 0
  • 하: dy[1] = 1, dx[1] = 0
  • 좌: dy[2] = 0, dx[2] = -1
  • 우: dy[3] = 0, dx[3] = 1
#include <iostream>
using namespace std;

int dy[4] = {-1, 1, 0, 0};
int dx[4] = {0, 0, -1, 1};

struct Point {
    int y;
    int x;
};

int map[4][4] = {
    {1, 3, 7, 2},
    {2, 2, 6, 1},
    {1, 4, 5, 1},
    {1, 1, 2, 1}
};

int main() {
    Point sp = {1, 1};
    int sum = 0;
    for (int i = 0; i < 4; i++) {
        int ny = sp.y + dy[i];
        int nx = sp.x + dx[i];
        if (ny < 0 || nx < 0 || ny >= 4 || nx >= 4) continue; // 맵을 벗어나는 경우 제외
        sum += map[ny][nx];
    }
    cout << "상하좌우 합: " << sum << "\n";
    return 0;
}​

위 코드에서는 특정 좌표의 상하좌우 합을 구합니다. 방향 배열을 사용하여 각 방향으로 이동한 좌표를 계산하고, 맵을 벗어나는 경우를 제외하여 합을 구합니다.

이처럼 방향 배열을 사용하면 이동 경로를 쉽게 관리할 수 있으며, struct를 사용하면 코드의 가독성을 높일 수 있습니다.