백준/단계별

[C++] 백준 2738

loasd 2022. 12. 29. 00:00
반응형

백준의 2738번 문제 행렬 덧셈이다.

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

 

2738번: 행렬 덧셈

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

www.acmicpc.net


 < 문제 >

N*M크기의 두 행렬 A와 B가 주어졌을 때, 두 행렬을 더하는 프로그램을 작성하시오.

 

 < 예제 >

행과 열의 크기를 입력받고 그 크기의 두 배열의 합을 구하는 문제이다.

 

코드는 다음과 같다.

#include <iostream>
using namespace std;

int main() {
	int row, columm;
	cin >> row >> columm;

	int** a = new int* [row];
	for (int i = 0; i < row; i++)
		a[i] = new int[columm];

	int** b = new int* [row];
	for (int i = 0; i < row; i++)
		b[i] = new int[columm];

	for (int i = 0; i < row; i++) {
		for (int j = 0; j < columm; j++) {
			cin >> a[i][j];
		}
	}

	for (int i = 0; i < row; i++) {
		for (int j = 0; j < columm; j++) {
			cin >> b[i][j];
		}
	}

	for (int i = 0; i < row; i++) {
		for (int j = 0; j < columm; j++) {
			a[i][j] += b[i][j];
			cout << a[i][j] << " ";
		}
		cout << endl;
	}

	for (int i = 0; i < row; i++) {
		delete a[i];
		delete b[i];
	}
	delete a;
	delete b;
}

먼저 row, columm을 입력받고 그 크기의 배열을 만들어주기 위해 동적할당을 하였다.

원래 동적할당을 할 때 이런 방식을 사용한다.

	// 동적 할당
	int* a = new int [row];
	// 메모리 해제
	delete a;

할당 후 메모리 해제를 해줘야 해서 delete를 해줘야한다.

 

그런데 이차원 배열을 활용하려면 이렇게 작성해줘야 한다.

	// 동적 할당
	int** a = new int* [row];
	for (int i = 0; i < row; i++)
		a[i] = new int[columm];

	int** b = new int* [row];
	for (int i = 0; i < row; i++)
		b[i] = new int[columm];

	// 메모리 해제
	for (int i = 0; i < row; i++) {
		delete a[i];
		delete b[i];
	}
	delete a;
	delete b;

이렇게 배열을 생성해주 었다면 각각의 배열을 더해주기만 하면 된다.

 

fo문을 통해 배열a, 배열b에 입력을 받았은 후에

	for (int i = 0; i < row; i++) {
		for (int j = 0; j < columm; j++) {
			a[i][j] += b[i][j];
			cout << a[i][j] << " ";
		}
		cout << endl;
	}

이렇게 각 배열을 더한 값을 a배열에 저장해주었다.

반응형

'백준 > 단계별' 카테고리의 다른 글

[C++] 백준 2563  (0) 2022.12.29
[C++] 백준 2566  (0) 2022.12.29
[C++] 백준 9020  (0) 2022.12.28
[C++] 백준 4948  (0) 2022.12.28
[C++] 백준 1929  (0) 2022.12.28