<내 처음 풀이>
#include<stdio.h>
int main(void)
{
int arr[5][5];
int i, j;
int total = 0;
for(i =0;i<4;i++)
for (j = 0; j < 4; j++)
{
scanf("%1d",& arr[i][j]);
}
//가로 줄 더하기
for (i = 0; i < 4; i++)
{
for (j = 0; j < 4; j++)
total += arr[i][j];
arr[i][4] = total;
}
//세로 줄 더하기
for (i = 0; i < 5; i++)
{
for (j = 0; j < 4; j++)
total += arr[j][i];
arr[4][i] = total;
}
for (i = 0; i < 5; i++)
{
for (j = 0; j < 5; j++)
printf("%3d", arr[i][j]);
printf("\n");
}
return 0;
}
이렇게 코드를 작성해주면 문제가 하나 있는데, total의 값이 계속 누적이 되어 올바르지 않은 출력 값을 보게 된다는 것이다. total의 변수는 for문에서 만들어진 지역변수가 아니라, main함수에서 선언이 된 지역변수 이므로, 계속 이렇게 값이 축적되고 늘어나게 되었던 것이다.
<다시 푼 내 풀이>
#include<stdio.h>
int main(void)
{
int arr[5][5];
int i, j;
for(i =0;i<4;i++)
for (j = 0; j < 4; j++)
{
scanf("%1d",& arr[i][j]);
}
//가로 줄 더하기
for (i = 0; i < 4; i++)
{
int total = 0;
for (j = 0; j < 4; j++)
total += arr[i][j];
arr[i][4] = total;
}
//세로 줄 더하기
for (i = 0; i < 5; i++)
{
int total = 0;
for (j = 0; j < 4; j++)
total += arr[j][i];
arr[4][i] = total;
}
for (i = 0; i < 5; i++)
{
for (j = 0; j < 5; j++)
printf("%3d", arr[i][j]);
printf("\n");
}
return 0;
}
total을 main함수의 지역변수가 아닌 각 for문내의 지역변수로 설정 해줌으로써 total의 값이 계속해서 중첩이 되는 일이 없어졌다. 출력 결과는 예제에서 보이는 결과와 동일하다.
<책에 나온 풀이> 가 있는데, 책 내에서도 책 내의 풀이에 대해 지금 단계에서의 풀이 일뿐, 개선되어야 한다고 얘기하고 있으므로, 이곳에 적진 않고 혼자 공부하도록 하겠다.
위의 내풀이도 사람들의 수가 늘어나거나 과목의 수가 늘어날 경우 분명 보완이 필요한 풀이이다. 이 풀이의 방법을 고집해서 한다면 어떤 식으로 보완해 나가야 할지 알 것 같지만, 앞으로 더 배우며 조금 더 적절한 방법의 풀이를 사용할 수 있기를 바란다.