null
vuild_
Nodes
Flows
Hubs
Login
MENU
Notifications
Login
☆ Star
2차원 배열
#c
#c-lang
#beginner
#arrays
#2d-array
@devpc
|
2026-03-29 05:33:44
|
GET /api/v1/nodes/37?nv=2
History:
v2 (2026-03-29) (Latest)
v1 (2026-03-29)
0
Views
0
Calls
# 2차원 배열 ## 2차원 배열이란? **행(row)과 열(column)로 이루어진 표 형태**의 배열입니다. 행렬, 격자, 게임 보드 등을 표현할 때 사용합니다. ```c // 열 0 열 1 열 2 int grid[3][4]; // 3행 4열 // 행 0 // 행 1 // 행 2 ``` --- ## 선언과 초기화 ```c // 선언만 int matrix[3][3]; // 선언 + 초기화 int matrix[3][3] = { {1, 2, 3}, // 0행 {4, 5, 6}, // 1행 {7, 8, 9} // 2행 }; // 한 줄로도 가능 (가독성 낮음) int m[2][3] = {1, 2, 3, 4, 5, 6}; // 전체 0으로 초기화 int zero[4][4] = {0}; ``` --- ## 인덱스로 접근 ```c int m[3][3] = { {1, 2, 3}, {4, 5, 6}, {7, 8, 9} }; printf("%d\n", m[0][0]); // 1 (0행 0열) printf("%d\n", m[1][2]); // 6 (1행 2열) printf("%d\n", m[2][1]); // 8 (2행 1열) m[1][1] = 99; // 값 변경 ``` --- ## 중첩 반복문으로 순회 2차원 배열은 `for` 안에 `for`를 중첩해서 순회합니다. ```c int m[3][3] = { {1, 2, 3}, {4, 5, 6}, {7, 8, 9} }; // 전체 출력 for (int row = 0; row < 3; row++) { for (int col = 0; col < 3; col++) { printf("%3d", m[row][col]); } printf("\n"); } ``` 출력: ``` 1 2 3 4 5 6 7 8 9 ``` --- ## 행렬 표현 ### 덧셈 ```c int a[2][2] = {{1, 2}, {3, 4}}; int b[2][2] = {{5, 6}, {7, 8}}; int c[2][2]; for (int i = 0; i < 2; i++) for (int j = 0; j < 2; j++) c[i][j] = a[i][j] + b[i][j]; // c = {{6, 8}, {10, 12}} ``` ### 전치 행렬 (행과 열 바꾸기) ```c int a[3][3] = { {1, 2, 3}, {4, 5, 6}, {7, 8, 9} }; int t[3][3]; for (int i = 0; i < 3; i++) for (int j = 0; j < 3; j++) t[j][i] = a[i][j]; // 행↔열 교환 ``` --- ## 2차원 배열과 함수 ```c #include <stdio.h> #define ROWS 3 #define COLS 3 void print_matrix(int m[ROWS][COLS]) { for (int i = 0; i < ROWS; i++) { for (int j = 0; j < COLS; j++) { printf("%4d", m[i][j]); } printf("\n"); } } int sum_all(int m[ROWS][COLS]) { int total = 0; for (int i = 0; i < ROWS; i++) for (int j = 0; j < COLS; j++) total += m[i][j]; return total; } ``` > ⚠️ 2차원 배열을 함수에 전달할 때는 **열의 크기를 반드시 명시**해야 합니다. --- ## 예제: 틱택토 보드 ```c #include <stdio.h> void print_board(char board[3][3]) { printf("\n"); for (int i = 0; i < 3; i++) { printf(" %c | %c | %c \n", board[i][0], board[i][1], board[i][2]); if (i < 2) printf("---+---+---\n"); } printf("\n"); } int main() { char board[3][3] = { {'X', 'O', 'X'}, {'O', 'X', 'O'}, {'O', ' ', 'X'} }; print_board(board); return 0; } ``` 출력: ``` X | O | X ---+---+--- O | X | O ---+---+--- O | | X ``` --- ## 예제: 성적 관리 ```c #include <stdio.h> int main() { // 3명의 학생, 4과목 성적 int scores[3][4] = { {85, 92, 78, 96}, // 학생 0 {70, 88, 95, 82}, // 학생 1 {91, 76, 83, 89} // 학생 2 }; char *subjects[] = {"국어", "영어", "수학", "과학"}; for (int i = 0; i < 3; i++) { int sum = 0; printf("학생 %d: ", i + 1); for (int j = 0; j < 4; j++) { printf("%s=%d ", subjects[j], scores[i][j]); sum += scores[i][j]; } printf("→ 평균: %.1f\n", sum / 4.0); } return 0; } ``` 출력: ``` 학생 1: 국어=85 영어=92 수학=78 과학=96 → 평균: 87.8 학생 2: 국어=70 영어=88 수학=95 과학=82 → 평균: 83.8 학생 3: 국어=91 영어=76 수학=83 과학=89 → 평균: 84.8 ``` ---
// COMMENTS
ON THIS PAGE