글의 요약 설명 부분. 150자를 적어주세요. 글의 요약 설명 부분. 150자를 적어주세요. 글의 요약 설명 부분. 150자를 적어주세요. 글의 요약 설명 부분. 150자를 적어주세요. 글의 요약 설명 부분. 150자를 적어주세요. 글의 요약 설명 부분. 150자입니다

 

목차

     


     

    백준 2738 문제 

     


     

    문제 해설

    2개의 N x M 행렬을 만든 후에 덧셈을 하자. 

     

     


     

    내 풀이

    행렬을 만들어야 하므로 2차원 배열을 사용하였다. 

     

    #include <iostream>
    using namespace std;
     
    int main()
    {
        int N, M;
        cin >> N >> M;
        
        int matrixA[100][100];
        int matrixB[100][100];
     
        for (int j = 0; j < N; j++)
        {
            for (int i = 0; i < M; i++)
            {
                cin >> matrixA[j][i];
            }
        }
     
        for (int j = 0; j < N; j++)
        {
            for (int i = 0; i < M; i++)
            {
                cin >> matrixB[j][i];
            }
        }
     
        for (int j = 0; j < N; j++)
        {
            for (int i = 0; i < M; i++)
            {
                cout << matrixA[j][i] + matrixB[j][i] << " ";
            }
            cout << endl;
        }
     
        return 0;
    }
    cs

     

     

     

     

     


     

    더 나은 풀이

    문제를 푼 후 더 나은 풀이가 있는지 찾아보았다. 위의 코드는 배열을  100x100으로 만든 다음 값을 밀어넣었기 때문에 메모리가 필요 이상으로 사용되었다. 아래의 코드는 동적배열을 사용하여 불필요한 메모리 사용을 줄였다. 동적할당 해제는 생략하였다.

    #include <iostream>
    using namespace std;
     
    int main()
    {
        int N, M;
        cin >> N >> M;
        
        int** matrixA = new int* [N]; //matrixA를 동적할당
        for (int i = 0; i < N; i++)
        {
            matrixA[i] = new int[M];
        }
     
        int** matrixB = new int* [N]; //matrixB를 동적할당
        for (int i = 0; i < N; i++)
        {
            matrixB[i] = new int[M];
        }
     
     
        for (int j = 0; j < N; j++)
        {
            for (int i = 0; i < M; i++)
            {
                cin >> matrixA[j][i];
            }
        }
     
        for (int j = 0; j < N; j++)
        {
            for (int i = 0; i < M; i++)
            {
                cin >> matrixB[j][i];
            }
        }
     
        for (int j = 0; j < N; j++)
        {
            for (int i = 0; i < M; i++)
            {
                cout << matrixA[j][i] + matrixB[j][i] << " ";
            }
            cout << endl;
        }
     
        return 0;
    }
    cs

     

     


    마무리

    다른 자료구조 STL을 사용하는 방법도 있다. 하지만 행렬의 특성상 각 자리에 정수값이 들어가므로 2차원 배열이 가장 편리하고 직관적이다.

     

    2차원 배열 동적할당 참고

     

    https://ya-ya.tistory.com/101

     

    [C/C++]C++ 이차원 배열 동적할당

    동적할당 코드를 작성하면서 최적화라던지 여러가지 이유로 런타임에 배열의 크기를 결정해야 할 때가 있습니다. 그럴 때 동적할당을 하게 되는데, C++에서 1차원배열인 경우와 2차원배열은 경

    ya-ya.tistory.com

     

     

     

     

     

     

     

     

     

     

     

    '⭐ 코딩테스트' 카테고리의 다른 글

    [백준 25501] 재귀의 귀재  (0) 2022.11.09
    [백준 10817 C++] 세 수  (0) 2022.11.08
    [백준 2750] 정렬  (0) 2022.11.03
    [백준 1978] 소수 찾기  (0) 2022.07.23
    [백준 10872] 팩토리얼  (0) 2022.07.23