OneDev
[C++] 백준(BOJ) 2738번 - 행렬 덧셈 본문
두 개의 행렬을 입력받아 각각의 원소들을 더한 뒤 출력하는 문제이다.
(풀이 1) n 과 m이 100보다 작거나 같은 정수이기 때문에 100 x 100 의 배열을 만들어 더하는 방법이 있다.
#include <iostream>
using namespace std;
int a[101][101], b[101][101], n, m; // 크기가 100 x 100 인 배열 A, B 선언
int main() {
cin >> n >> m;
for (int i = 1; i <= n; i++) // A 배열 입력
for (int j = 1; j <= m; j++)
cin >> a[i][j];
for (int i = 1; i <= n; i++) // B 배열 입력
for (int j = 1; j <= m; j++)
cin >> b[i][j];
for (int i = 1; i <= n; i++) // 원소끼리 더한 뒤 출력!
{
for (int j = 1; j <= m; j++)
cout << a[i][j] + b[i][j] << ' ';
cout << '\n';
}
return 0;
}
(풀이 2) 배열 동적 할당하기
위 문제의 경우 m과 n의 최대 크기가 정해졌기 때문에 위와 같은 풀이가 가능했지만, 별로 내키는 방법은 아니다.
m,n의 크기에 제한이나 조건이 없다면 위와 같은 방법은 쓸 수 없기 때문이다.
그래서 이번엔 new 와 delete를 이용해 배열을 동적 할당하여 풀어보았다.
#include <iostream>
using namespace std;
int main() {
int n, m;
cin >> n >> m;
// n x m 행렬 구현
int** a = new int*[n];
int** b = new int*[n];
/*2차원 배열을 구현하기 위해 먼저 1차원 배열을 생성한 뒤,
각 배열의 한 행을 1차원 배열로 할당하였다
*/
for (int i = 0; i < n; i++) {
a[i] = new int[m];
b[i] = new int[m];
}
// 이제 배열에 값을 입력받자!
for (int i = 0; i < n; i++) { // A 배열 입력받기
for (int j = 0; j < m; j++) {
cin >> a[i][j];
}
}
for (int i = 0; i < n; i++) { // B 배열 입력받기
for (int j = 0; j < m; j++) {
cin >> b[i][j];
}
}
// 출력 조건에 맞게 값을 출력해주면 끝!
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
cout << a[i][j] + b[i][j] << " ";
}
cout << "\n";
}
// 메모리 해제 잊지 말자
for (int i = 0; i < n; i++) {
delete[] a[i];
delete[] b[i];
}
delete[] a;
delete[] b;
return 0;
}
잘 풀린 것을 볼 수 있습니다.
※ vector 헤더를 이용해 푸는 방법도 시도해 봤는데, 어딘지 모르게 자꾸 에러가 나네요. 실력좀 기르고 나중에 다시 풀어서 성공하면 vector를 이용한 풀이도 올리겠습니다.
'자료구조&알고리즘 > BOJ' 카테고리의 다른 글
[C] 백준 10988- 팰린드롬인지 확인하기 (0) | 2023.07.19 |
---|---|
[C] 백준 9086 - 문자열 (0) | 2023.07.18 |
[JAVA] 백준 2563- 색종이 (0) | 2023.06.03 |
[JAVA] 백준 25501번 : 재귀의 귀재 (0) | 2023.01.24 |
[JAVA] 백준 2557 번 : Hello World! (백준 Java public class) (0) | 2023.01.03 |
Comments