POST

C언어 다차원 배열 - 3차원 배열

3차원 배열에 대한 설명을 하기에 앞서 몇가지의 사실을 알았으면 한다. 

3차원배열은 흔히 사용되는 배열이 아니며, 여러분이 2차원 배열을 이해하고 있다면 3차원 배열도 이해하고 있다는 것이다.


따라서, 2차원 배열을 100%다 알고 있다면 3차원 배열에서 추가적으로 알아야할것은 많지가 않다. 하지만,

만약 3차원 배열이 이해가 안된다면 다차원 배열에 대한 이해가 부족하거나 다차원 배열이 익숙치않은 것이다.


3차원 배열이란?


2차원 배열이 세로와 가로를 가진 사각형 형태의 모양이라 한다면 3차원 배열은 가로, 세로 그리고 높이가 추가 되었다고 볼 수 있다.

이것은 직육면체와 같은 모습이며, 흔히들아는 장난감 큐브와 같다.




우선 아래의 코드를 실행하여 3차원 배열의 크기를 확인하자.그러면 3차원 배열의 구조를 쫌더 구체적으로 이해할 수 있을 것이다.


#include<stdio.h>


int main(void) {

int arr1[2][3][4];

double arr2[5][5][5];

printf("높이 2, 세로 3, 가로 4 int형(4Byte) 배열의 크기: %d\n", sizeof(arr1));

printf("높이 5, 세로 5, 가로 5 double형(8Byte) 배열의 크기: %d\n", sizeof(arr2));

return 0;

}


위 코드의 실행 결과는 아래와 같다.



배열 arr1의 크기가 96인 이유는 2 x 3 x 4 x sizeof(int) 이고, 

배열 arr2의 크기가 1000인 이유는 5 x 5 x 5 x sizeof(double) 이기 때문이다.


int형은 4Byte이며 double형은 8byte이다.

자료형 - 바로가기


이제 논리적으로 직육면체 형태의 배열이라는 것을 이해할 수 있을것 이다.


그럼 3차원 배열에 대한 선언과 초기화 그리고 접근하는 방법을 살펴 보도록하자.

사실, 이는 2차원 배열과는 크게 차이를 보이지 않는다.


예제를 이용하여 알아보자.

어느 고등학교 3학년 전체 학생의 국어와 수학점수를 반별로 구분하여 저장후 반별 평균을 구해보자.

(반별 학생수는 3명이고, 총 학급의 수는 3개이다.)


#include<stdio.h>


int main(void) {

int mean = 0, x,y,z;

int record[3][3][2] = {

{

{ 70, 80 }, // 1반 학생1의 성적

{ 94, 90 }, // 1반 학생2의 성적

{ 70, 85 } // 1반 학생3의 성적

},

{

{ 83, 90 }, // 2반 학생1의 성적

{ 95, 60 }, // 2반 학생2의 성적

{ 90, 82 } // 2반 학생3의 성적

},

{

{ 98, 89 }, // 3반 학생1의 성적

{ 99, 94 }, // 3반 학생2의 성적

{ 91, 87 } // 3반 학생3의 성적

}

};

for (z = 0; z < 3; z++) { // 반(3반)

for (y = 0; y < 3; y++) { // 학생(3명)

for (x = 0; x < 2; x++) { // 점수(국어, 수학)

mean += record[z][y][x]; // 저장된 각 점수들을 저장

}

}

printf("%d반 전체 평균: %g\n",z+1, (double)mean / 6); // 평균출력

mean = 0; // 총점수를 저장하는 변수 초기화

}

return 0;

}

위코드의 실행결과는 아래와 같다.


위 예제는 3차원 배열을 선언과 동시에 초기화하고있고.

3중 for반복문을 이용하여 각반의 점수들을 합하여 반평균을 구하고있다.


그리고 눈치를 챗겠지만, 2차원 배열의 초기화리스트는 1차원 배열의 초기화리스트가 다수 모여 있고

3차원 배열의 초기화리스트는 2차원 배열의 초기화 리스트가 다수 모여 이루어 져있는 형태이다.


또한 3차원 배열이 가로,세로,높이를 가진 정육면체라고 했지만 사실 3차원 배열은 여러개의 2차원 배열이 모여있는 형태이며,

이렇게 이해하는 것이 더 합리적이다.


그래도 복잡하다면 도서관을 예를 들어보자


책이 데이터이며 그 책들을 꽂은 책꽂이가 1차원 배열

책꽂이가 1층 2층 3층 쌓이고 모여 책장되며 이 책장을 2차원 배열

그리고 책장들이 모여 있는 형태가 바로 3차원 배열


배열은 많고 비슷한 자료들을 묶는데 유용하며 앞으로 많이 쓰이게 될것이다.