안녕하세요 판타지코딩입니다!
저번 시간에는 배열(Array)에 대해서 공부하고, 비슷한 성격의 데이터를 한 번에 처리하는 방법으로 배열을 활용했습니다. 저장할 데이터의 개수만큼 변수를 생성해서 저장하는 방법도 있지만, 배열을 활용하면 일괄적으로 처리할 수 있다는 장점이 있습니다. 배열은 아래와 같이 표현합니다.
int arr[3] = {1, 2, 3};
저장할 데이터에 따라서 자료형을 결정하고, 배열 이름을 설정한 뒤 괄호 안에 배열의 크기를 작성합니다. 그리고 데이터를 저장할 때에는 콤마를 기준으로 한 개씩 작성해 줍니다. 이처럼 배열은 여러 개의 데이터를 한 번에 저장할 수 있다는 장점이 있습니다.
그럼 이번에는 배열이 여러 개 있다고 가정해 보겠습니다. arr1, arr2, arr3 이렇게 여러 개의 배열을 생성할 수 있습니다. 하지만 이렇게 배열을 여러 개 생성하는 것 보다는 한 개의 배열에 세 개의 배열을 저장하는 것이 더 효율적일 수 있습니다. 이것을 바로 '이중 배열'이라고 합니다!
이중 배열
이중 배열은 배열 내에 또 다른 배열이 여러 개 있는 것을 의미합니다. 이중 배열은 아래와 같이 구현할 수 있습니다.
int arr[3][3] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
3x3 배열을 생성했습니다. 정수를 저장할 것이기 때문에 자료형은 'int'로 설정했고, 배열의 이름은 'arr'입니다. 그리고 괄호 두 개에는 배열의 크기가 작성되어 있습니다. 우선 앞의 괄호에 작성된 3은 가장 밖의 배열을 의미하고, 뒤에 작성된 3은 안에 각가의 배열의 크기를 의미합니다.
int arr[2][3] = {{1, 2, 3}, {4, 5, 6}};
배열의 크기를 의미하는 괄호 안의 숫자를 변경하여 각 숫자가 어떤 배열을 의미하는지 보여드리기 위해 앞의 괄호의 숫자를 2로 줄였습니다. 배열이 2칸으로 줄어들면서 내부의 배열의 개수가 2개로 줄어들었습니다. 그리고 각 배열의 요소는 3개씩 존재하므로 뒤의 괄호 안에 있는 3이 바로 내부의 배열의 크기를 의미함을 알 수 있습니다.
arr[0] // {1, 2, 3}
arr[0][1] // 2
arr[1] // {4, 5, 6}
arr[1][2] // 5
각 배열의 요소는 위와 같이 인덱스로 접근할 수 있습니다. arr의 0번째인 arr[0]에는 배열 {1, 2, 3}이 저장되어 있습니다. 그리고 이 배열의 1번째인 arr[0][1]은 2가 저장되어 있습니다.
arr의 1번째에는 {4, 5, 6}이 저장되어 있습니다. 그리고 arr[1][2]에는 5가 저장되어 있습니다.
이중 배열을 그림으로 표현하면 아래와 같이 이해할 수 있습니다.
배열 arr은 3칸으로 이루어져 있습니다. 각 칸의 인덱스는 0, 1, 2로 이루어져 있습니다. 그리고 0번째 인덱스에 1, 2, 3이 저장되어 있고, 다음 인덱스에도 이렇게 3개씩 데이터가 저장되어 있습니다. 각 인덱스에 저장된 배열의 요소도 0번째부터 해서 인덱스가 존재합니다.
이중 배열 활용하기
이중 배열은 배열 내에 배열을 생성합니다. 그러므로 순서쌍을 작성할 때 유리합니다!
1교시 수업 : 9~10시
2교시 수업 : 10~11시
3교시 수업 : 12~13시
위와 같이 시간표를 작성했다고 가정해 보겠습니다. 이것을 코드로 작성해 보겠습니다.
int arr[5][5] = {{9, 10}, {10, 11}, {12, 13}};
for(int i=0; i<3; i++)
{
printf("%d시 ~ %d시\n", arr[i][0], arr[i][1]);
}
배열 arr을 생성했습니다. 배열의 크기는 저장할 데이터의 크기보다 작지만 않으면 됩니다! 그리고 9시~10시를 {9, 10} 처럼 작성하여 3개의 배열을 저장했습니다.
for문으로 각 시간을 출력하기 위해 arr을 0부터 2까지 반복하면서 arr[i]의 0번째는 앞의 수, 1번째는 뒤의 수를 출력하도록 했습니다. 코드 실행 결과 아래와 같이 출력됩니다.
9시 ~ 10시
10시 ~ 11시
12시 ~ 13시
이처럼 이중 배열을 활용하면 배열을 여러 개 만들지 않고 한 개의 배열에 저장하여 한꺼번에 처리할 수 있습니다.
그럼 오늘은 이중 배열에 대해서 공부하고 활용하는 방법을 알아보았습니다. 이중 배열의 각 인덱스가 어떻게 처리되는지를 고려하면서 코드를 작성해 보시면 쉽게 이해가 되실겁니다.
감사합니다!
'C언어' 카테고리의 다른 글
C언어 소수를 입력하고 출력하기 - 실수와 float형에 대해서 (0) | 2023.04.03 |
---|---|
C언어 %d에 대해서 공부하자! - printf함수 (0) | 2023.03.30 |
C언어 배열(Array)을 공부하자! (0) | 2023.03.27 |
C언어 이분탐색(Binary search)을 공부하자! - while문 활용 (0) | 2023.03.26 |
C언어 while문을 공부하자! 반복문 (0) | 2023.03.25 |