최대 1 분 소요

Question

Q


Solution

  • 두 행렬의 곱셈의 결과는 앞 행렬의 행, 뒤 행렬의 열의 크기를 가진다. (m x k) * (k x n) = (m x n)
  • 미리 구해진 행렬의 크기 만큼 0으로 초기화 시킨다.
  • 각각의 위치에 대한 행렬 곱셈식을 적용 시킨다.

Cord

#include <string>
#include <vector>

using namespace std;

void Init(vector<vector<int>>& answer, int rowSize, int columnSize)
{
    for (int row = 0; row < rowSize; ++row)
    {
        vector<int> temp(columnSize);
        answer.push_back(temp);
    }
}

vector<vector<int>> solution(vector<vector<int>> arr1, vector<vector<int>> arr2)
{
    vector<vector<int>> answer;

    int rowSize = arr1.size();        // 만들어질 행렬의 행 = 앞 행렬의 행
    int columnSize = arr2[0].size();  // 만들어질 행렬의 열 = 뒤 행렬의 열
    
    Init(answer, rowSize, columnSize);  // 만들어질 행렬 사이즈 만큼 공간 확보

    for (int row = 0; row < rowSize; ++row)
    {
        for (int column = 0; column < columnSize; ++column)
        {       
            // 두 행렬의 곱 (x * k) * (k * y) 공통된 k 만큼 반복
            for (int k = 0; k < arr2.size(); ++k)
            {
                answer[row][column] += arr1[row][k] * arr2[k][column];
            }
        }
    }

    return answer;
}

Result

Result