C언어 초급 - 8장: 배열과 문자열 (8.2 다차원 배열)

2025. 2. 23. 19:12프로그래밍 언어/C

8.2 다차원 배열

C 언어에서 다차원 배열(Multi-dimensional Array)여러 개의 차원을 가지는 배열입니다.
가장 많이 사용되는 2차원 배열은 행과 열의 구조를 가지며, 행렬(matrix) 연산이나 2D 데이터 저장 및 처리에 유용합니다.


1. 2차원 배열의 선언 및 활용

1.1 2차원 배열 선언

2차원 배열을 선언하는 기본 문법은 다음과 같습니다.

자료형 배열이름[행][열];

📌 배열의 크기(행과 열)는 반드시 정수여야 하며, 선언 후 변경할 수 없음.

1.2 2차원 배열 선언 예제

#include <stdio.h>

int main() {
    int matrix[3][4];  // 3행 4열의 2차원 배열 선언

    return 0;
}

📌 설명

  • int matrix[3][4]; → 3개의 행(row), 4개의 열(column)을 가지는 배열 선언.
  • 각 요소는 matrix[행][열] 형식으로 접근 가능.

1.3 2차원 배열 초기화

2차원 배열을 선언과 동시에 초기화할 수 있습니다.

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

📌 초기화된 값은 메모리에 연속적으로 저장됨.


1.4 2차원 배열 초기화 예제

#include <stdio.h>

int main() {
    int matrix[2][3] = { {1, 2, 3}, {4, 5, 6} };  // 2행 3열 배열 선언 및 초기화

    printf("matrix[0][1] = %d\n", matrix[0][1]);  // 2 출력
    printf("matrix[1][2] = %d\n", matrix[1][2]);  // 6 출력

    return 0;
}

출력 결과

matrix[0][1] = 2
matrix[1][2] = 6

📌 설명

  • matrix[0][1] → 첫 번째 행, 두 번째 열의 값(2).
  • matrix[1][2] → 두 번째 행, 세 번째 열의 값(6).

2. 2차원 배열과 반복문

2차원 배열은 이중 반복문(nested loop) 을 사용하면 쉽게 데이터를 입력하고 출력할 수 있습니다.

2.1 2차원 배열을 사용한 데이터 입력 및 출력

#include <stdio.h>

int main() {
    int matrix[2][3];

    // 배열 입력 받기
    printf("2×3 행렬의 요소를 입력하세요:\n");
    for (int i = 0; i < 2; i++) {
        for (int j = 0; j < 3; j++) {
            printf("matrix[%d][%d] = ", i, j);
            scanf("%d", &matrix[i][j]);
        }
    }

    // 배열 출력하기
    printf("\n입력한 행렬:\n");
    for (int i = 0; i < 2; i++) {
        for (int j = 0; j < 3; j++) {
            printf("%d ", matrix[i][j]);
        }
        printf("\n"); // 행 구분
    }

    return 0;
}

실행 예시

2×3 행렬의 요소를 입력하세요:
matrix[0][0] = 1
matrix[0][1] = 2
matrix[0][2] = 3
matrix[1][0] = 4
matrix[1][1] = 5
matrix[1][2] = 6

입력한 행렬:
1 2 3
4 5 6

📌 설명

  • 중첩 반복문(for 문)을 사용하여 배열을 입력 및 출력.
  • printf("\n")을 사용하여 각 행을 구분.

3. 행렬 연산

3.1 행렬 덧셈 (Matrix Addition)

행렬 덧셈은 같은 크기의 행렬을 더하는 연산입니다.

예제 – 두 행렬의 합

#include <stdio.h>

int main() {
    int A[2][2] = { {1, 2}, {3, 4} };
    int B[2][2] = { {5, 6}, {7, 8} };
    int result[2][2];

    // 행렬 덧셈
    for (int i = 0; i < 2; i++) {
        for (int j = 0; j < 2; j++) {
            result[i][j] = A[i][j] + B[i][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;
}

출력 결과

행렬 덧셈 결과:
6 8
10 12

📌 설명

  • result[i][j] = A[i][j] + B[i][j]; → 각 요소끼리 더함.

3.2 행렬 곱셈 (Matrix Multiplication)

행렬 곱셈은 행렬의 곱셈 규칙을 따라 수행됩니다.

예제 – 두 행렬의 곱

#include <stdio.h>

int main() {
    int A[2][3] = { {1, 2, 3}, {4, 5, 6} };
    int B[3][2] = { {7, 8}, {9, 10}, {11, 12} };
    int result[2][2] = {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] += A[i][k] * B[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;
}

출력 결과

행렬 곱셈 결과:
58 64
139 154

📌 설명

  • result[i][j] += A[i][k] * B[k][j]; → 행렬 곱셈 공식 적용.
  • A가 2×3 행렬, B가 3×2 행렬이므로 결과는 2×2 행렬.

4. 정리

개념  설명  예제
2차원 배열 선언 행과 열을 가진 배열 선언 int arr[3][4];
2차원 배열 초기화 중괄호 {}를 사용하여 초기값 설정 int arr[2][2] = {{1, 2}, {3, 4}};
2차원 배열과 반복문 for 문을 사용하여 배열 요소 입력 및 출력 for (i=0; i<행; i++) for (j=0; j<열; j++)
행렬 덧셈 같은 크기의 행렬을 더함 result[i][j] = A[i][j] + B[i][j];
행렬 곱셈 행렬 곱셈 규칙 적용 result[i][j] += A[i][k] * B[k][j];

📌 2차원 배열은 행과 열 구조를 가지며, 메모리에서 연속적으로 저장됨
📌 반복문을 활용하면 데이터를 효율적으로 처리 가능
📌 행렬 연산(덧셈, 곱셈)도 반복문을 이용하여 구현 가능