소개

2차원 배열, 또는 행렬을 회전하는 문제는 프로그래밍에서 흔히 발생하는 문제로, 특히 컴퓨터 그래픽과 데이터 조작과 같은 다양한 응용 프로그램에서 나타날 수 있습니다. 이 블로그 포스트에서는 4x4 행렬을 90도 시계 방향으로 회전하는 과정을 살펴보겠습니다.

문제 이해하기

다음과 같은 구조의 2차원 배열이 있다고 가정해보겠습니다:

[1][2][3][4]
[5][6][7][8]
[9][0][1][2]
[3][4][5][6]

이 행렬을 90도 시계 방향으로 회전하면 다음과 같이 변형되어야 합니다:

[3][9][5][1]
[4][0][6][2]
[5][1][7][3]
[6][2][8][4]

실질적으로 원래 배열의 각 요소는 회전에 따라 새로운 위치로 이동합니다. 그렇다면, C#와 같은 프로그래밍 언어에서 이것을 어떻게 구현할 수 있을까요? 단계별로 나누어 보겠습니다.

해결책

1단계: 행렬 초기화하기

먼저, 프로그램에서 행렬을 초기화할 필요가 있습니다. 다음과 같이 할 수 있습니다:

int[,] array = new int[4,4] {
    { 1,2,3,4 },
    { 5,6,7,8 },
    { 9,0,1,2 },
    { 3,4,5,6 }
};

2단계: 행렬을 회전하는 함수 생성하기

다음으로, RotateMatrix라는 회전을 수행하는 함수를 만들 것입니다. 이 함수는 원래 행렬과 그 크기를 매개변수로 받아 회전된 행렬을 반환합니다.

RotateMatrix 함수의 구현은 다음과 같습니다:

static int[,] RotateMatrix(int[,] matrix, int n) {
    int[,] ret = new int[n, n];

    for (int i = 0; i < n; ++i) {
        for (int j = 0; j < n; ++j) {
            ret[i, j] = matrix[n - j - 1, i];
        }
    }

    return ret;
}

3단계: 함수 설명하기

  • 행렬 선언: 입력과 동일한 크기의 새로운 행렬 ret를 선언합니다.
  • 중첩 루프: 중첩 루프를 사용하여 행렬의 각 요소를 순회합니다.
  • 회전 논리: 각 요소의 위치 (i, j)를 새로운 위치 (j, n - i - 1)로 매핑합니다. 이 공식을 통해 90도 시계 방향으로 요소를 올바르게 회전시킬 수 있습니다.

4단계: 함수 테스트하기

회전된 행렬을 출력하여 함수를 테스트할 수 있습니다:

int[,] rotated = RotateMatrix(array, 4);

확인을 위해 행렬을 출력하는 메서드를 구현하는 것을 잊지 마세요.

결론

2차원 배열을 회전하는 것은 인덱스 매핑을 이해하면 간단한 작업입니다. 현재 접근 방법은 O(n^2) 시간 복잡도로 작동하지만, 더 큰 행렬(예: 10000x10000)을 위한 알고리즘 최적화는 알고리즘 및 데이터 구조에서 지속적인 논의 주제입니다.

이제 자신 있게 C#에서 어떤 2차원 배열이든지 회전시킬 수 있습니다. 즐거운 코딩 되세요!