[C언어] 다차원 배열
💕 2차원 배열
int arr1[3][4]; // 세로가 3, 가로가 4인 int형 2차원 배열
int arr2[2][6]; // 세로가 2, 가로가 6인 int형 2차원 배열
정리하면 배열의 이름이 arr이고 배열요소의 자료형이 TYPE이라고 할때, 2차원 배열의 선언형태는 다음과 같다.
TYPE arr[세로길이][가로길이];
프로그램 사용자로부터 층별로 두 기구가 사는 4층짜리 빌라의 가구별 거주인원 수를 입력 받는 예제를 작성해보자.
#include <stdio.h>
int main()
{
int villa[4][2]; //세로가 4, 가로가 2인 배열 생성
int popu, i, j;
//가구별 거주인원 입력 받기
for (i = 0; i < 4; i++)
{
for (j = 0; j < 2; j++)
{
printf("%d층 %d호 인구수: ", i + 1, j + 1);
scanf("%d", &villa[i][j]);
}
}
//빌라의 층별 인구수 출력하기
for (i = 0; i < 4; i++)
{
popu = 0;
popu = popu + villa[i][0];
popu = popu + villa[i][1];
printf("%d층 인구수: %d \n", i + 1, popu);
}
return 0;
}
RESULT:
한 층에 2호가 있는 4층짜리 빌라가 있다고 생각하면 쉽다. 1차원 배열을 이용하여 묻는 것보다 훨씬 효율적으로 코드를 작성함을 알 수 있다.
🤦♀️ 과정
1. 반복문을 활용하여 1층 ~ 4층, 1호 ~ 2호까지를 반복되게끔 한다. ( 인구수 물어볼 목적 )
2. 빌라의 층별 인구수를 출력하기 위해 가로는 고정된 채로 층별로 반복문을 돌린다.
💕 2차원 배열 선언과 동시에 초기화하기
#include <stdio.h>
int main()
{
int i, j;
// 2차원 배열 초기화의 예 1
int arr1[3][3] = {
{1,2,3},
{4,5,6},
{7,8,9}
};
// 2차원 배열 초기화의 예 2
int arr2[3][3] = {
{1},
{4,5},
{7,8,9}
};
int arr3[3][3] = { 1,2,3,4,5,6,7, };
for (i = 0; i < 3; i++)
{
for (j = 0; j < 3; j++)
printf("%d", arr2[i][j]);
printf("\n");
}
for (i = 0; i < 3; i++)
{
for (j = 0; j < 3; j++)
printf("%d", arr3[i][j]);
printf("\n");
}
return 0;
}
RESULT:
[2차원 배열의 활용]
🙌 예제 1)
가로의 길이가 9, 세로의 길이가 3인 int형 2차원 배열을 선언하여 구구단 중 2단, 3단, 4단을 저장하자. 그리고 제대로 저장이 되었는지 확인하기 위한 출력을 진행하기 위한 예제를 작성하자.
🤦♀️ 생각 과정
1. 먼저 세로의 길이 3, 가로의 길이 9인 arr[3][9]를 선언해준다.
2. 행 (단)을 의미하는 변수 i, 열을 의미하는 변수 j를 만들어 반복문을 만들어준다.
답안:
#include <stdio.h>
int main()
{
int arr[3][9]; // 가로가 9, 세로가 3인 int형 2차원 배열 생성
int i, j; // 행과 열의 반복 변수 생성
for (i = 0; i < 3; i++)
for (j = 0; j < 9; j++)
arr[i][j] = (i + 2) * (j + 1); //구구단 저장
for (i = 0; i < 3; i++)
{
for (j = 0; j < 9; j++)
printf("%4d", arr[i][j]); // 구구단 출력
printf("\n");
}
return 0;
}
RESULT:
✔ 보충할 부분
1. 구구단을 저장하는 부분과 출력하는 부분을 같이 하려다 보니 원하는 답안이 나오지 않았다. 생각을 분리하는 과정이 중요할 것 같다. 예를 들어 이 문제의 경우 구구단을 하는 과정이 1) 반복문을 통해 배열에 구구단의 결과값을 저장 2) 반복문을 통해 저장한 결과값을 출력 이다.