n * m 크기의 행렬이 주어졌을 때 두 행렬의 합을 구하시오.
첫째줄에는 n과 m이 주어진다.
행렬 a 그 다음에는 행렬 b가 주어진다.
두 행렬의 합을 출력하다.
처음에는 행렬이 3개가 필요하다고 판단했다.
행렬 a, 행렬 b, 그리고 두 행렬의 합을 받을 행렬 sum
그래서 다음과 같은 코드를 만들었으나.....
#include<stdio.h>
int main() {
int a[101][101];
int b[101][101];
int sum[101][101];//합을 받을 행렬
int n, m;
scanf("%d %d", &n, &m);
for (int i = 0; i < n; i++) {
for (int j = 0; i < m; j++) {//여기가 문제여.
scanf("%d", &a[i][j]);
}
}
for (int i = 0; i < n; i++) {
for (int j = 0; i < m; j++) {//여기가 문제다.
scanf("%d", &b[i][j]);
}
}
for (int i = 0; i < n; i++) {
for (int j = 0; i < m; j++) {
sum[i][j] = a[i][j] + b[i][j];
}
}//a와 b의 합을 만듦
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
printf("%d", sum[i][j]);
}
}
return 0;
}
결과는 시간초과...
바보같이 j가 아니라 i를 넣었다.
그리고 너무 반복문이 많은 것 같아서 조금 더 구글링 해보니 굳이 합을 담는 행렬을 만들 필요는 없을 것 같았다.
합을 만드는 반복문 안에 출력까지 하면 될 듯 했다. 그래서 최종적인 답은
#include <stdio.h>
int main(void){
int N, M;
scanf("%d %d", &N, &M);
int A[N][M];
int B[N][M];
for(int i=0; i<N; i++){
for(int j=0; j<M; j++){
scanf("%d", &A[i][j]);//A입력
}
}
for(int i=0; i<N; i++){
for(int j=0; j<M; j++){
scanf("%d", &B[i][j]);//B입력
}
}
for(int i=0; i<N; i++){
for(int j=0; j<M; j++){
int sum = A[i][j] + B[i][j];//합 만들기
printf("%d ", sum);//합 출력
}
printf("\n");
}return 0;
}
그런데 정답을 만든 이후에도 코드를 이러저리 흩어서 제출을 해봤는데
sum행렬을 따로 만들어서 출력을 하면 계속 오답으로 처리가 된다.
이유가 있는 건지.... 내가 분석을 조금 더 해봐야 할 부분이다.
일단 처음에 접근하는 방향이 적중했다는 것에 조금 만족감을 가지지만 아직 코딩초보 이다 보니 가용할 수 있는 범위가 그리 크지 않아서 답답하다.
다른 사람들의 답안을 보면 포인터를 사용한 경우도 있는데 포인터를 왜 사용한건지 아직 잘 모르겠다. 조금 더 공부가 필요한 부분이다.