개인공부/백준

[백준(BOJ)] 행렬 덧셈 | 2738번 문제 풀이 (브론즈3, C언어)

피까츄 2024. 6. 29. 20:22

1. 문제

2. 풀이

각 행렬의 값을 더하면 되는 간단한 문제이다.

 

*2차원 배열에 대해 해설할 것

3. 코드

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
	int N, M, num;
	scanf("%d %d", &N, &M);
	int a[100][100];

	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", &num);
			a[i][j] += num;
		}
	}

	for (int i = 0; i < N; i++) {
		for (int j = 0; j < M; j++) {
			printf("%d ", a[i][j]);
		}
		printf("\n");
	}

}

동적 메모리 할당ver.

#include <stdio.h>
#include <stdlib.h>

int main(void) {
    int N, M;
    scanf("%d %d", &N, &M);

    int** array = (int**)malloc(N * sizeof(int*));
    for (int i = 0; i < N; i++) {
        array[i] = (int*)malloc(M * sizeof(int));
    }

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

    int** array_2 = (int**)malloc(N * sizeof(int*));
    for (int i = 0; i < N; i++) {
        array_2[i] = (int*)malloc(M * sizeof(int));
    }

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

    for (int i = 0; i < N; i++) {
        for (int j = 0; j < M; j++) {
            array[i][j] += array_2[i][j];
            printf("%d ", array[i][j]);
        }
        printf("\n");
    }

    for (int i = 0; i < N; i++) {
        free(array[i]);
        free(array_2[i]);
    }

    free(array);
    free(array_2);

    return 0;
}

 

4. 참고