[백준 2738] 2차원 배열의 덧셈

Groundstone51·2023년 11월 15일

백준 혼공

목록 보기
2/7

문제

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;
}

One More Thing

그런데 정답을 만든 이후에도 코드를 이러저리 흩어서 제출을 해봤는데
sum행렬을 따로 만들어서 출력을 하면 계속 오답으로 처리가 된다.
이유가 있는 건지.... 내가 분석을 조금 더 해봐야 할 부분이다.
일단 처음에 접근하는 방향이 적중했다는 것에 조금 만족감을 가지지만 아직 코딩초보 이다 보니 가용할 수 있는 범위가 그리 크지 않아서 답답하다.
다른 사람들의 답안을 보면 포인터를 사용한 경우도 있는데 포인터를 왜 사용한건지 아직 잘 모르겠다. 조금 더 공부가 필요한 부분이다.

profile
I'm always be here. Because I'm stone

0개의 댓글