C++ 초급 - 6. 배열과 문자열 (2 - 다차원 배열 (int matrix[3][3];))

2025. 2. 22. 13:31프로그래밍 언어/C++

📌 6.2 다차원 배열 (int matrix[3][3];)

다차원 배열(Multidimensional Array)2차원 이상의 데이터를 저장할 수 있는 배열이다.
특히 2차원 배열(행렬)은 행(Row)과 열(Column) 구조로 데이터를 저장할 때 유용하게 사용된다.

C++에서는 정적(고정 크기) 다차원 배열과 동적(가변 크기) 다차원 배열을 사용할 수 있다.


📌 1. 2차원 배열 선언 및 초기화

🔹 (1) 2차원 배열 선언 방식

💡 기본 문법

데이터타입 배열이름[행][열];

💡 예제: 2차원 배열 선언 및 초기화

#include <iostream>

int main() {
    int matrix1[3][3];  // 선언만 하고 초기화하지 않음 (쓰레기 값 저장)
    
    int matrix2[3][3] = {  // 행과 열을 명시적으로 초기화
        {1, 2, 3},
        {4, 5, 6},
        {7, 8, 9}
    };

    int matrix3[][3] = {  // 행 크기는 생략 가능
        {10, 20, 30},
        {40, 50, 60}
    };

    std::cout << "matrix2[1][2]: " << matrix2[1][2] << std::endl;  // 6 출력

    return 0;
}

🔹 출력 결과

matrix2[1][2]: 6

💡 설명

  • int matrix2[3][3] = {...}; → 3×3 행렬을 명시적으로 초기화.
  • int matrix3[][3] = {...}; → 행 크기 생략 가능(자동 결정).
  • matrix2[1][2] → 두 번째 행, 세 번째 열의 값(6)을 출력.

📌 2. 다차원 배열 요소 접근 및 수정

2차원 배열의 요소는 행(Row)과 열(Column) 인덱스를 사용하여 접근할 수 있다.

💡 기본 문법

배열이름[행][열] = 값;

💡 예제: 2차원 배열 요소 접근 및 수정

#include <iostream>

int main() {
    int matrix[2][3] = {{1, 2, 3}, {4, 5, 6}};

    std::cout << "초기값: " << matrix[0][1] << std::endl;  // 2

    matrix[0][1] = 10;  // 배열 요소 수정

    std::cout << "수정된 값: " << matrix[0][1] << std::endl;  // 10

    return 0;
}

🔹 출력 결과

초기값: 2
수정된 값: 10

💡 설명

  • matrix[0][1] = 10; → 첫 번째 행, 두 번째 열의 값을 10으로 변경.

📌 3. 중첩 반복문을 이용한 다차원 배열 순회

2차원 배열을 다룰 때는 중첩(nested) 반복문을 활용하면 편리하다.

💡 예제: 2차원 배열 순회

#include <iostream>

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

    std::cout << "2차원 배열 출력:" << std::endl;

    for (int i = 0; i < 3; i++) {  // 행 루프
        for (int j = 0; j < 3; j++) {  // 열 루프
            std::cout << matrix[i][j] << " ";
        }
        std::cout << std::endl;  // 행 출력 후 줄바꿈
    }

    return 0;
}

🔹 출력 결과

2차원 배열 출력:
1 2 3 
4 5 6 
7 8 9

💡 설명

  • for (int i = 0; i < 3; i++) → 행을 순회.
  • for (int j = 0; j < 3; j++) → 열을 순회하여 한 행을 출력.

📌 4. 배열의 동적 할당을 이용한 다차원 배열 활용

C++에서는 new 키워드를 사용하여 동적으로 2차원 배열을 할당 가능하다.
이 방식은 배열 크기를 런타임에 결정할 수 있어 유연한 데이터 구조를 만들 때 유용하다.

💡 예제: 동적 할당을 이용한 2차원 배열

#include <iostream>

int main() {
    int rows = 3, cols = 3;

    // 동적 2차원 배열 생성 (행 포인터 배열 생성)
    int** matrix = new int*[rows];

    for (int i = 0; i < rows; i++) {
        matrix[i] = new int[cols];  // 각 행마다 열을 동적 할당
    }

    // 배열 초기화
    for (int i = 0; i < rows; i++) {
        for (int j = 0; j < cols; j++) {
            matrix[i][j] = i * cols + j + 1;  // 예제 값 저장
        }
    }

    // 배열 출력
    std::cout << "동적 2차원 배열:" << std::endl;
    for (int i = 0; i < rows; i++) {
        for (int j = 0; j < cols; j++) {
            std::cout << matrix[i][j] << " ";
        }
        std::cout << std::endl;
    }

    // 동적 배열 메모리 해제
    for (int i = 0; i < rows; i++) {
        delete[] matrix[i];  // 각 행의 메모리 해제
    }
    delete[] matrix;  // 행 포인터 배열 해제

    return 0;
}

🔹 출력 결과

동적 2차원 배열:
1 2 3
4 5 6
7 8 9

💡 설명

  • new int*[rows] → 행을 가리키는 포인터 배열을 동적 할당.
  • matrix[i] = new int[cols]; → 각 행의 열을 동적 할당.
  • delete[] matrix[i]; → 각 행을 해제.
  • delete[] matrix; → 행 포인터 배열 해제.

주의

  • 동적 할당한 메모리는 반드시 delete[]를 사용하여 해제해야 메모리 누수를 방지할 수 있다.

📌 5. 정리

개념  설명
2차원 배열 선언 int matrix[3][3];
2차원 배열 초기화 {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
요소 접근 및 수정 matrix[0][1] = 10;
배열 순회 중첩 for 문 활용
동적 할당 int** matrix = new int*[rows]; 사용
메모리 해제 delete[] matrix[i]; delete[] matrix;