본문 바로가기
Language&Framework&Etc/C

다차원 배열(16-2) 3차원 배열

by 머리올리자 2020. 12. 9.

큐빅퍼즐은 3차원의 구조

 

가로, 세로, 높이가 있음

 

3차원 배열은 중심부의 블록이 채워진 형태의 큐빅퍼즐에 비유할 수 있음

 

3차원 배열 : 가로와 세로로 이뤄진 2차원 배열 + 높이의 개념

 

int    arr1[2][3][4]; // 높이 2, 세로 3, 가로 4인 int형 3차원 배열
double arr2[5][5][5]; // 높이 5, 세로 5, 가로 5인 double형 3차원 배열

 

배열의 크기 확인

#include <stdio.h>


int main(void)
{
	int arr1[2][3][4];
	double arr2[5][5][5];
	printf("높이2, 세로3, 가로4 int형 배열 : %d\n", sizeof(arr1));
	printf("높이5, 세로5, 가로5 double형 배열 : %d\n", sizeof(arr2));
}

 

3차원 배열의 선언과 접근

예제 : 고등학교 3학년 전체 학생의 국어와 수학점수를 반별로 구분 → 반별 학생수 3명, 학급의 수 3명

#include <stdio.h>


int main(void)
{
	int mean = 0;
	int record[3][3][2] = 
	{
		{
			{70, 80}, // A 학습 학생 1의 성적
			{94, 90}, // A 학습 학생 2의 성적
			{70, 85}// A 학습 학생 3의 성적
		},
		{
			{83, 90}, // B 학습 학생 1의 성적
			{95, 60}, // B 학습 학생 2의 성적
			{90, 82}  // B 학습 학생 3의 성적
		},
		{
			{98, 89}, // C 학습 학생 1의 성적
			{99, 94}, // C 학습 학생 2의 성적
			{91, 87}  // C 학습 학생 3의 성적
		}
	};

	for (int i = 0; i < 3; i++)
		for (int j = 0; j < 2; j++)
			mean += record[0][i][j];
	printf("A 학습 전체 평균 : %g \n", (double)mean / 6);

	mean = 0;
	for (int i = 0; i < 3; i++)
		for (int j = 0; j < 2; j++)
			mean += record[1][i][j];
	printf("B 학습 전체 평균 : %g \n", (double)mean / 6);

	mean = 0;
	for (int i = 0; i < 3; i++)
		for (int j = 0; j < 2; j++)
			mean += record[2][i][j];
	printf("C 학습 전체 평균 : %g \n", (double)mean / 6);


	printf("\n\nfor문으로 묶어버리기!!!!!!!!!!\n");

	/* for문으로 묶기 */
	mean = 0;
	for (int room = 0; room < 3; room++)
	{ 
		for (int i = 0; i < 3; i++)
			for (int j = 0; j < 2; j++)
				mean += record[room][i][j];
		printf("학습 전체 평균 : %g \n", (double)mean / 6);
		mean = 0;
	}
}

위 for문으로 묶기를 보면 중간에 중괄호가 있는데 이는 반복되는 문장이 하나가 아니기 때문이다

 

3차원 배열은 여러 개의 2차원 배열이 모여있는 형태로 이해하는 것이 더 합리적

 

즉 int record[3][3][2] 라고하면

 

세로 가로의 길이가 3과 2인 int형 배열 세 개가 겹쳐 있는 것으로 이해가 편할 것임

 

참고 : [윤성우 열혈 C 프로그래밍] - 대부분의 내용 및 코드는 이 책에서 개인 공부 정리 목적으로 참고하였습니다.