이 글에서는 C 언어를 사용하여 5×5 크기의 2차원 배열(행렬)에 대해 각 행의 합(row sum)과 각 열의 합(column sum)을 계산하는 프로그램을 작성해 보겠습니다.
문제 정의
사용자로부터 5×5 행렬의 요소를 런타임(실행 시점)에 콘솔로 입력받은 뒤, 각 행별 합계와 각 열별 합계를 순서대로 출력하는 것이 목표입니다.
해결 접근 방법
이 프로그램은 다음과 같은 흐름으로 동작합니다.
- 중첩
for반복문을 사용해 25개의 배열 요소를 입력받습니다. - 행 합: 바깥 반복문이 행(
i)을 순회하고, 안쪽 반복문이 열(j)을 순회하며 누적합니다. - 열 합: 반대로 바깥 반복문이 열(
j)을 순회하고, 안쪽 반복문이 행(i)을 순회합니다. - 각 행(또는 열)의 합계를 출력한 후에는 반드시 누적 변수를
0으로 초기화해야 다음 계산이 올바르게 진행됩니다.
행 합 계산 로직
for(i = 0; i < 5; i++) { // i는 행 인덱스
for(j = 0; j < 5; j++) { // j는 열 인덱스
row = row + A[i][j]; // 행 합 누적
}
}
열 합 계산 로직
for(j = 0; j < 5; j++) { // j는 열 인덱스
for(i = 0; i < 5; i++) { // i는 행 인덱스
column = column + A[i][j]; // 열 합 누적
}
}
두 로직의 차이는 단순히 반복문의 순서를 뒤바꾼 것뿐입니다. 이처럼 인덱스 순서만 변경해도 행 우선 계산과 열 우선 계산을 자유롭게 전환할 수 있습니다.
전체 예제 코드
#include <stdio.h>
int main() {
// 배열 및 변수 선언
int A[5][5], i, j, row = 0, column = 0;
// 배열에 요소 입력받기
printf("배열에 들어갈 요소를 입력하세요 : \n");
for(i = 0; i < 5; i++) {
for(j = 0; j < 5; j++) {
printf("A[%d][%d] : ", i, j);
scanf("%d", &A[i][j]);
}
}
// 모든 행의 요소 합계 계산
for(i = 0; i < 5; i++) {
for(j = 0; j < 5; j++) {
row = row + A[i][j];
}
printf("%d번째 행의 요소 합 : %d\n", i, row);
row = 0; // 다음 행 계산을 위해 초기화
}
// 모든 열의 요소 합계 계산
for(j = 0; j < 5; j++) {
for(i = 0; i < 5; i++) {
column = column + A[i][j];
}
printf("%d번째 열의 요소 합 : %d\n", j, column);
column = 0; // 다음 열 계산을 위해 초기화
}
return 0;
}
참고: 열 합계를 출력할 때는 반복문이 끝난 후의 값인 j를 인덱스로 출력해야 합니다. 만약 실수로 i를 출력하면 안쪽 반복문이 종료된 후 i가 5가 되어 버리므로, 모든 결과가 '5번째 열'로 잘못 표시되는 버그가 발생합니다. 위 코드에는 이 부분이 이미 올바르게 반영되어 있습니다.
실행 결과
1부터 25까지의 값을 순서대로 입력했을 때의 실행 결과는 다음과 같습니다.
배열에 들어갈 요소를 입력하세요 :
A[0][0] : 1
A[0][1] : 2
A[0][2] : 3
A[0][3] : 4
A[0][4] : 5
A[1][0] : 6
A[1][1] : 7
A[1][2] : 8
A[1][3] : 9
A[1][4] : 10
A[2][0] : 11
A[2][1] : 12
A[2][2] : 13
A[2][3] : 14
A[2][4] : 15
A[3][0] : 16
A[3][1] : 17
A[3][2] : 18
A[3][3] : 19
A[3][4] : 20
A[4][0] : 21
A[4][1] : 22
A[4][2] : 23
A[4][3] : 24
A[4][4] : 25
0번째 행의 요소 합 : 15
1번째 행의 요소 합 : 40
2번째 행의 요소 합 : 65
3번째 행의 요소 합 : 90
4번째 행의 요소 합 : 115
0번째 열의 요소 합 : 55
1번째 열의 요소 합 : 55
2번째 열의 요소 합 : 55
3번째 열의 요소 합 : 55
4번째 열의 요소 합 : 55
정리
행렬의 행 합과 열 합 계산은 중첩 반복문에서 어떤 인덱스를 바깥에 두느냐에 따라 달라진다는 점만 이해하면 어렵지 않습니다. 또한 누적 변수를 각 단계마다 초기화하는 습관, 그리고 출력 시 올바른 인덱스 변수를 사용하는 것이 정확한 결과를 얻는 핵심입니다. 이 코드를 확장하면 N×N 행렬이나 행렬의 대각선 합 계산 등으로도 손쉽게 응용할 수 있습니다.