C에서 다차원 배열
안녕하세요, 미래의 프로그래머 여러분! 오늘 우리는 C에서 다차원 배열의 세계에 흥미로운 여정을 떠납니다. 프로그래밍에 새로운 사람이라고 걱정하지 마세요 - 저는 여러분의 친절한 안내자가 되겠습니다. 우리는 이 주제를 단계별로 공략하겠습니다. 이 튜토리얼의 끝을 맞아서, 여러분은 이 강력한 데이터 구조를 다루는 달인이 될 것입니다!
C에서 다차원 배열
基础부터 시작해보겠습니다. 여러 상자가 있고, 각 상자 안에 또 다른 상자들이 들어있는 상상해보세요. 그게 바로 다차원 배열입니다 - 데이터를 여러 단계나 차원으로 조직하는 방법입니다.
C에서는 1차원 이상의 배열을 만들 수 있습니다. 가장 일반적인 유형은 2차원(2-dimensional)과 3차원(3-dimensional) 배열이지만, 이론적으로는 컴퓨터의 메모리가 허용하는 만큼 차원을 늘릴 수 있습니다!
2차원 배열을 간단히 선언하는 방법은 다음과 같습니다:
int matrix[3][4];
이 코드는 3행 4열의 2차원 배열 matrix
를 만듭니다. 이를 그리드나 테이블로 생각해보세요.
C에서 두차원 배열
2차원 배열에 대해 더 깊이 탐구해보겠습니다. 틱택톡 게임 보드를 만드는 예제를 생각해보세요:
#include <stdio.h>
int main() {
char board[3][3] = {
{'_', '_', '_'},
{'_', '_', '_'},
{'_', '_', '_'}
};
// 보드를 인쇄합니다
for(int i = 0; i < 3; i++) {
for(int j = 0; j < 3; j++) {
printf("%c ", board[i][j]);
}
printf("\n");
}
return 0;
}
이 예제에서 우리는 3x3의 틱택톡 보드를 만듭니다. 각 셀은 밑줄 '_'로 초기화되어 빈 공간을 나타냅니다. 그런 다음 중첩된 루프를 사용하여 보드를 인쇄합니다.
外부 루프 for(int i = 0; i < 3; i++)
는 각 행을 반복하며, 내부 루프 for(int j = 0; j < 3; j++)
는 해당 행의 각 열을 반복합니다.
C에서 세차원 배열
이제 한 단계 더 업그레이드하여 3차원 배열을 탐구해보겠습니다. 간단한 3차원 게임 세계를 디자인하는 상상을 해보세요:
#include <stdio.h>
int main() {
int gameWorld[2][3][4] = {
{{1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}},
{{13, 14, 15, 16}, {17, 18, 19, 20}, {21, 22, 23, 24}}
};
// 게임 세계를 인쇄합니다
for(int i = 0; i < 2; i++) {
printf("레벨 %d:\n", i+1);
for(int j = 0; j < 3; j++) {
for(int k = 0; k < 4; k++) {
printf("%2d ", gameWorld[i][j][k]);
}
printf("\n");
}
printf("\n");
}
return 0;
}
여기서 우리는 3차원 배열 gameWorld
를 만듭니다. 이 배열은 2개의 레벨로 구성되어 있으며, 각 레벨은 3행 4열을 가지고 있습니다. 이를 두 개의 2차원 그리드가 쌓여 있는 것으로 생각할 수 있습니다.
우리는 세 개의 중첩된 루프를 사용하여 이 3차원 세계를 인쇄합니다. 외부 루프는 각 레벨을 반복하며, 중간 루프는 레벨의 각 행을 반복하며, 내부 루프는 행의 각 열을 반복합니다.
다차원 배열의 원소들의 행별 합
이제 조금 더 실용적인 것을 시도해보겠습니다. 2차원 배열의 각 행의 합을 계산해보겠습니다:
#include <stdio.h>
int main() {
int grades[3][4] = {
{85, 92, 78, 88},
{91, 87, 93, 89},
{76, 82, 95, 90}
};
printf("학생 수학 과학 영어 역사 합계\n");
printf("----------------------------------------------\n");
for(int i = 0; i < 3; i++) {
int sum = 0;
printf("%7d", i+1);
for(int j = 0; j < 4; j++) {
printf("%8d", grades[i][j]);
sum += grades[i][j];
}
printf("%8d\n", sum);
}
return 0;
}
이 예제에서 우리는 3명의 학생이 4과목의 점수를 가지고 있는 2차원 배열 grades
를 가지고 있습니다. 각 학생(행)의 점수 합을 계산하고 인쇄합니다.
행렬 곱셈
마지막으로, 우리는 행렬 곱셈을 수행해보겠습니다 - 많은 과학적 및 공학적 응용에서 흔히 사용되는 연산입니다:
#include <stdio.h>
int main() {
int matA[2][3] = {{1, 2, 3}, {4, 5, 6}};
int matB[3][2] = {{7, 8}, {9, 10}, {11, 12}};
int result[2][2] = {{0, 0}, {0, 0}};
// 행렬 곱셈을 수행합니다
for(int i = 0; i < 2; i++) {
for(int j = 0; j < 2; j++) {
for(int k = 0; k < 3; k++) {
result[i][j] += matA[i][k] * matB[k][j];
}
}
}
// 결과를 인쇄합니다
printf("행렬 곱셈의 결과:\n");
for(int i = 0; i < 2; i++) {
for(int j = 0; j < 2; j++) {
printf("%d ", result[i][j]);
}
printf("\n");
}
return 0;
}
여기서 우리는 2x3 행렬 matA
와 3x2 행렬 matB
를 곱하여 2x2 행렬 result
를 얻습니다. 세 개의 중첩된 루프는 곱셈을 수행합니다: 외부 두 개의 루프는 결과 행렬의 각 요소를 반복하며, 내부 루프는 해당 요소의 값을 계산합니다.
그렇게 해서 우리는 C에서 다차원 배열의 기본을 다루고, 2D에서 3D로 나아가며, 몇 가지 실용적인 응용을 탐구했습니다. 연습이 완벽을 이루는 데 도움이 되기를 바라며, 여러분의 coding을 기대하고 있습니다!
Credits: Image by storyset