C에서 다차원 배열

안녕하세요, 미래의 프로그래머 여러분! 오늘 우리는 C에서 다차원 배열의 세계에 흥미로운 여정을 떠납니다. 프로그래밍에 새로운 사람이라고 걱정하지 마세요 - 저는 여러분의 친절한 안내자가 되겠습니다. 우리는 이 주제를 단계별로 공략하겠습니다. 이 튜토리얼의 끝을 맞아서, 여러분은 이 강력한 데이터 구조를 다루는 달인이 될 것입니다!

C - Multi-Dimensional Arrays

C에서 다차원 배열

基础부터 시작해보겠습니다. 여러 상자가 있고, 각 상자 안에 또 다른 상자들이 들어있는 상상해보세요. 그게 바로 다차원 배열입니다 - 데이터를 여러 단계나 차원으로 조직하는 방법입니다.

C에서는 1차원 이상의 배열을 만들 수 있습니다. 가장 일반적인 유형은 2차원(2-dimensional)과 3차원(3-dimensional) 배열이지만, 이론적으로는 컴퓨터의 메모리가 허용하는 만큼 차원을 늘릴 수 있습니다!

2차원 배열을 간단히 선언하는 방법은 다음과 같습니다:

int matrix[3][4];

이 코드는 3행 4열의 2차원 배열 matrix를 만듭니다. 이를 그리드나 테이블로 생각해보세요.

C에서 두차원 배열

2차원 배열에 대해 더 깊이 탐구해보겠습니다. 틱택톡 게임 보드를 만드는 예제를 생각해보세요:

#include <stdio.h>

int main() {
    char board[3][3] = {
        {'_', '_', '_'},
        {'_', '_', '_'},
        {'_', '_', '_'}
    };

    // 보드를 인쇄합니다
    for(int i = 0; i < 3; i++) {
        for(int j = 0; j < 3; j++) {
            printf("%c ", board[i][j]);
        }
        printf("\n");
    }

    return 0;
}

이 예제에서 우리는 3x3의 틱택톡 보드를 만듭니다. 각 셀은 밑줄 '_'로 초기화되어 빈 공간을 나타냅니다. 그런 다음 중첩된 루프를 사용하여 보드를 인쇄합니다.

外부 루프 for(int i = 0; i < 3; i++)는 각 행을 반복하며, 내부 루프 for(int j = 0; j < 3; j++)는 해당 행의 각 열을 반복합니다.

C에서 세차원 배열

이제 한 단계 더 업그레이드하여 3차원 배열을 탐구해보겠습니다. 간단한 3차원 게임 세계를 디자인하는 상상을 해보세요:

#include <stdio.h>

int main() {
    int gameWorld[2][3][4] = {
        {{1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}},
        {{13, 14, 15, 16}, {17, 18, 19, 20}, {21, 22, 23, 24}}
    };

    // 게임 세계를 인쇄합니다
    for(int i = 0; i < 2; i++) {
        printf("레벨 %d:\n", i+1);
        for(int j = 0; j < 3; j++) {
            for(int k = 0; k < 4; k++) {
                printf("%2d ", gameWorld[i][j][k]);
            }
            printf("\n");
        }
        printf("\n");
    }

    return 0;
}

여기서 우리는 3차원 배열 gameWorld를 만듭니다. 이 배열은 2개의 레벨로 구성되어 있으며, 각 레벨은 3행 4열을 가지고 있습니다. 이를 두 개의 2차원 그리드가 쌓여 있는 것으로 생각할 수 있습니다.

우리는 세 개의 중첩된 루프를 사용하여 이 3차원 세계를 인쇄합니다. 외부 루프는 각 레벨을 반복하며, 중간 루프는 레벨의 각 행을 반복하며, 내부 루프는 행의 각 열을 반복합니다.

다차원 배열의 원소들의 행별 합

이제 조금 더 실용적인 것을 시도해보겠습니다. 2차원 배열의 각 행의 합을 계산해보겠습니다:

#include <stdio.h>

int main() {
    int grades[3][4] = {
        {85, 92, 78, 88},
        {91, 87, 93, 89},
        {76, 82, 95, 90}
    };

    printf("학생  수학  과학  영어  역사  합계\n");
    printf("----------------------------------------------\n");

    for(int i = 0; i < 3; i++) {
        int sum = 0;
        printf("%7d", i+1);
        for(int j = 0; j < 4; j++) {
            printf("%8d", grades[i][j]);
            sum += grades[i][j];
        }
        printf("%8d\n", sum);
    }

    return 0;
}

이 예제에서 우리는 3명의 학생이 4과목의 점수를 가지고 있는 2차원 배열 grades를 가지고 있습니다. 각 학생(행)의 점수 합을 계산하고 인쇄합니다.

행렬 곱셈

마지막으로, 우리는 행렬 곱셈을 수행해보겠습니다 - 많은 과학적 및 공학적 응용에서 흔히 사용되는 연산입니다:

#include <stdio.h>

int main() {
    int matA[2][3] = {{1, 2, 3}, {4, 5, 6}};
    int matB[3][2] = {{7, 8}, {9, 10}, {11, 12}};
    int result[2][2] = {{0, 0}, {0, 0}};

    // 행렬 곱셈을 수행합니다
    for(int i = 0; i < 2; i++) {
        for(int j = 0; j < 2; j++) {
            for(int k = 0; k < 3; k++) {
                result[i][j] += matA[i][k] * matB[k][j];
            }
        }
    }

    // 결과를 인쇄합니다
    printf("행렬 곱셈의 결과:\n");
    for(int i = 0; i < 2; i++) {
        for(int j = 0; j < 2; j++) {
            printf("%d ", result[i][j]);
        }
        printf("\n");
    }

    return 0;
}

여기서 우리는 2x3 행렬 matA와 3x2 행렬 matB를 곱하여 2x2 행렬 result를 얻습니다. 세 개의 중첩된 루프는 곱셈을 수행합니다: 외부 두 개의 루프는 결과 행렬의 각 요소를 반복하며, 내부 루프는 해당 요소의 값을 계산합니다.

그렇게 해서 우리는 C에서 다차원 배열의 기본을 다루고, 2D에서 3D로 나아가며, 몇 가지 실용적인 응용을 탐구했습니다. 연습이 완벽을 이루는 데 도움이 되기를 바라며, 여러분의 coding을 기대하고 있습니다!

Credits: Image by storyset