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; |
'프로그래밍 언어 > C++' 카테고리의 다른 글
C++ 초급 - 6. 배열과 문자열 (4 - C-스타일 문자열 (char str[])) (0) | 2025.02.22 |
---|---|
C++ 초급 - 6. 배열과 문자열 (3 - std::vector) (0) | 2025.02.22 |
C++ 초급 - 6. 배열과 문자열 (1 - 배열 (int arr[5];)) (0) | 2025.02.12 |
C++ 초급 - 5. 포인터와 참조 (Pointers and References) (4 - 스마트 포인터 (std::unique_ptr, std::shared_ptr, std::weak_ptr)) (0) | 2025.02.12 |
C++ 초급 - 5. 포인터와 참조 (Pointers and References) (3 - 참조 (& 연산자)) (0) | 2025.02.12 |