반응형
백준의 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 |