C언어 study_다차원 배열

민성철·2022년 11월 17일
0

nadocoding_study_C

목록 보기
13/17

다차원 배열

배열은 동일한 자료형의 값 여러 개를 저장하는 연속된 메모리 공간입니다.
이렇게 연속된 메모리 공간이 하나 있는 배열을 1차원 배열이라고 합니다.

다차원 배열(mulit-dimensional array)은 1차원 배열에 배열을 하나 이상 추가한 2차원, 또는 그 이상의 배열을 의미합니다.
예를 들어 동일한 크기의 1차원 배열이 2개 이상 연속되면 이를 2차원 배열이라 합니다.

2차원 배열은 기존 1차원 배열에서 배열의 크기를 하나 더 적어줍니다.
그렇게 되면 배열명 옆에 총 2개의 배열 크기가 있고, 이를 왼쪽부터 "행", "열"로 볼 수 있습니다.

int arr[행][열] // 행 = 3, 열 = 4


[이미지 출처 : https://velog.io/@yjy9500/%ED%8C%8C%EC%9D%B4%EC%8D%AC-2%EC%B0%A8%EC%9B%90-%EB%B0%B0%EC%97%B4]

총 3 X 4 = 12 개의 행렬 지표가 만들어지는 걸 알아볼 수 있습니다.

여기서 더 나아가, 같은 원리로 2차원 배열이 2개 이상 연속되면 3차원 배열이 됩니다.

3차원 배열은 위에 이미지인 행렬 지표가 3개가 겹겹이 쌓이는 개념입니다.


[이미지 출처 : https://velog.io/@whddn0221/%EB%B0%B1%EC%A4%80-7569-%ED%86%A0%EB%A7%88%ED%86%A0-BFS-3%EC%B0%A8%EC%9B%90-%EB%B0%B0%EC%97%B4]

그럼 총 3(행) X 4(열) X 3(면) = 36으로 확인 가능합니다.

다차원 배열

다차원 배열 다루기(초기화)

다차원 배열을 초기화하려면, 차원의 개수만큼 중괄호로 씌어주면 됩니다.
예로 들어,

1차원 배열의 경우 {1, 2, 3}; 
2차원 배열의 경우 {
				{1, 2, 3}, 
			   {4, 5, 6}
               }; 
3차원 배열의 경우 {
			   {
            	{1, 2, 3}, 
				{4, 5, 6}
               }, 
               {
                {7, 8, 9}, 
                {10, 11, 12}
               },
               {
               	{13, 14, 15},
                {16, 17, 18}
               }
              }

차원의 개수만큼 중괄호의 개수를 맞춰주면 되지만 가독성을 위해 줄 바꿈을 해줬습니다.

다차원 배열도 1차원 배열처럼 크기를 명시하지 않고 초기화를 할 수 있습니다.

int arr[][2] = {1, 2, 3, 4};

코드에 명시된 '열'방향의 크기와 요소의 개수에 따라 첫 번째 대괄호('행')에 해당하는 크기가 자동으로 정해집니다. 위 코드의 경우 요소가 4개이므로 2 X 2 크기의 2차원 배열을 만들게 됩니다.

다차원 배열

다차원 배열 다루기(요소 접근)

1차원 배열에서는 인덱스 0부터 접근하였습니다.
2차원 배열에서도 동일하게 0부터 시작하는 인덱스로 접근하면 됩니다.

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

위 예시 코드를 기준으로 1~5는 0번째 행, 6~10은 1번째 행입니다.
또한, (1, 6)은 0번째 열, (2, 7)은 1번째 열, (3, 8)은 2번째 열, (4, 9)는 3번째 열, (5, 10)은 마지막 4번째 열입니다.
따라서 원하는 숫자(요소)에 접근하려면 각 위치에 있는 ['행']['열'] 인덱스를 넣어주면 됩니다.

2  : arr[0][1]
5  : arr[0][4]
6  : arr[1][0]
9  : arr[1][3]
10 : arr[1][4]

3차원 배열도 같은 방식으로 요소에 접근합니다.

위와 같이 원하는 요소로 접근하기 위해 직접 작성할 수도 있고, 때에 따라서 반복문(for문)을 통해서 접근할 수도 있습니다.
1차원 배열의 경우에는 반복문 한 번으로도 모든 요소에 접근이 가능하나, 2차원 이상일수록 차원수에 따라 반복문도 중첩해서 사용해야 접근이 용이합니다.

아래 예시 코드로 알아보겠습니다.

#include <stdio.h>

int main(void) {
	// 3차원 배열 선언
	int arr[3][3][3] = {
    	{
        	{1, 2, 3},
            {4, 5, 6},
            {7, 8, 9}
        },
        {
        	{11, 12, 13},
            {14, 15, 16},
            {17, 18, 19}
        },
        {
        	{21, 22, 23},
            {24, 25, 26},
            {27, 28, 29}
        }
    };
    
    //반복문(for문)을 통해 각 요소의 접근
    for (int i = 0; i < 3; i++) {
    	for (int j = 0; j < 3; j++) {
        	for (int k = 0; k < 3; k++) {
            	printf("3차원 배열 [%d][%d][%d]의 값 : %d\n", i, j, k, arr[i][j][k]);
            }
            printf("\n");
        }
        printf("\n");
    }
    return 0;
}

output

3차원 배열 [0][0][0]의 값 : 1
3차원 배열 [0][0][1]의 값 : 2
3차원 배열 [0][0][2]의 값 : 3

3차원 배열 [0][1][0]의 값 : 4
3차원 배열 [0][1][1]의 값 : 5
3차원 배열 [0][1][2]의 값 : 6

3차원 배열 [0][2][0]의 값 : 7
3차원 배열 [0][2][1]의 값 : 8
3차원 배열 [0][2][2]의 값 : 9


3차원 배열 [1][0][0]의 값 : 11
3차원 배열 [1][0][1]의 값 : 12
3차원 배열 [1][0][2]의 값 : 13

3차원 배열 [1][1][0]의 값 : 14
3차원 배열 [1][1][1]의 값 : 15
3차원 배열 [1][1][2]의 값 : 16

3차원 배열 [1][2][0]의 값 : 17
3차원 배열 [1][2][1]의 값 : 18
3차원 배열 [1][2][2]의 값 : 19


3차원 배열 [2][0][0]의 값 : 21
3차원 배열 [2][0][1]의 값 : 22
3차원 배열 [2][0][2]의 값 : 23

3차원 배열 [2][1][0]의 값 : 24
3차원 배열 [2][1][1]의 값 : 25
3차원 배열 [2][1][2]의 값 : 26

3차원 배열 [2][2][0]의 값 : 27
3차원 배열 [2][2][1]의 값 : 28
3차원 배열 [2][2][2]의 값 : 29

지금까지 살펴봤듯이 다차원 배열은 1차원 배열에서 차원이 하나씩 늘어나는 개념입니다.
즉, 더 많은 값을 저장하기 위해서는 좀 더 넓은 공간을 사용합니다.

profile
ENTJ-A

0개의 댓글