본문 바로가기

코딩/백준 BOJ

[백준/C언어] 2738번 - 행렬 덧셈

백준 웹사이트 "2738번 - 행렬 덧셈" 문제풀이입니다.

언어는 C언어입니다. (제출 언어: C99)

 


문제

 

2738번: 행렬 덧셈

첫째 줄에 행렬의 크기 N 과 M이 주어진다. 둘째 줄부터 N개의 줄에 행렬 A의 원소 M개가 차례대로 주어진다. 이어서 N개의 줄에 행렬 B의 원소 M개가 차례대로 주어진다. N과 M은 100보다 작거나 같

www.acmicpc.net


소스 코드

#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]);
        }
    }

    for(int i=0; i<N; i++){
        for(int j=0; j<M; j++){
            scanf("%d", &B[i][j]);
        }
    }

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

문제 풀이

  두 행렬이 주어졌을 때, 두 행렬을 더한 결과를 출력하는 문제입니다. 첫째 줄에 N, M이 주어지면 이를 크기로 하는 이차원 배열 A, B를 선언합니다. 그런 다음에는 차례로 배열 A, B를 채워 넣는데요, 이때 주의할 부분이 N은 행(row)의 개수이고, M은 열(column)의 개수라는 것입니다. 따라서 Line 10 ~ 14, Line 16 ~ 20 에서 배열 A, B를 채울 때 N과 M의 순서에 주의해야 합니다. 예제 입력은 "3 3"을 입력하여 정사각행렬이 되기 때문에, N과 M을 바꿔써도 결과가 똑같아 오류를 놓치고 넘어갈 수 있습니다. N과 M의 크기를 다르게 해서 한 번 시험해보는 것을 추천드립니다!

  마지막으로 Line 22 ~ 28은 행렬 A + B를 출력하는 for문입니다. 어차피 출력만이 목적이므로 굳이 새로운 행렬을 정의할 필요 없이 원소를 더할 때마다 출력해도 문제 없습니다.

반응형