티스토리 뷰

728x90
반응형

백준 온라인 저지(BOJ) 2738번 행렬 덧셈

https://www.acmicpc.net/problem/2738

 

2738번: 행렬 덧셈

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

www.acmicpc.net

* 사용언어 : C언어, C++

 

1. 문제

N * M 크기의 두 행렬 A, B 를 더하는 프로그램 작성

 

2. 풀이

행렬이 어색하시다면 Excel Sheet 를 생각하시면 이해가 되실 겁니다.

 

2차원 배열의 앞쪽 숫자, 즉 a[y][x] 에서

y 의 증가는 세로(줄)의 변화를 의미합니다.

y 가 0이면 첫 번째 줄, 1이면 아래로 이동해서 두 번째 줄, ... 입니다.

 

x 의 증가는 가로(칸)의 변화를 의미합니다.

x 가 0이면 첫 번째 칸, 2면 오른쪽 이동해서 두 번째 칸, ... 입니다.

 

이 개념을 알고 2차원 배열을 직접 그려보면서

2중 for 문과 연계하면서 이해하시면 될 것 같습니다.

 

추가로 문제에서 N 과 M 이 같은 행렬을 예시로 주어서 실수하기 좋은데,

3 × 2 행렬 등으로 바꿔서 디버깅해보시길 추천드립니다.

 

3. 코드

#ifndef _CRT_SECURE_NO_WARNINGS
#define _CRT_SECURE_NO_WARNINGS
#endif
/*
2738_행렬 덧셈
1116kb	0ms
*/
#include <cstdio>

int main() {
#ifdef _WIN32
	freopen("input.txt", "r", stdin);
#endif // _WIN32
	int a[100][100], b[100][100], n, m;

	scanf("%d %d", &n, &m);
	for (int y = 0; y < n; ++y) {
		for (int x = 0; x < m; ++x) {
			scanf("%d", &a[y][x]);
		}
	}
	for (int y = 0; y < n; ++y) {
		for (int x = 0; x < m; ++x) {
			scanf("%d", &b[y][x]);
		}
	}

	for (int y = 0; y < n; ++y) {
		for (int x = 0; x < m; ++x) {
			printf("%d ", a[y][x] + b[y][x]);
		}
		puts("");
	}

	return 0;
}

* puts("") 는 printf("\n") 와 같습니다.

728x90
반응형
댓글