OneDev

[C++] 백준(BOJ) 2738번 - 행렬 덧셈 본문

자료구조&알고리즘/BOJ

[C++] 백준(BOJ) 2738번 - 행렬 덧셈

one_dev 2022. 12. 1. 00:18

두 개의 행렬을 입력받아 각각의 원소들을 더한 뒤 출력하는 문제이다.

 

(풀이 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를 이용한 풀이도 올리겠습니다.

Comments