코딩테스트/프로그래머스

[레벨 2] 행렬의 곱셈

marmelo12 2021. 9. 17. 16:28
반응형
#include <string>
#include <vector>
using namespace std;

vector<vector<int>> solution(vector<vector<int>> arr1, vector<vector<int>> arr2) {
    int idx = arr1[0].size();
    int row = arr1.size();
    int col = arr2[0].size();
    vector<vector<int>> answer(row, vector<int>(col, 0));
    for (int i = 0; i < row; ++i)
    {
        for (int j = 0; j < col; ++j)
        {
            for (int k = 0; k < idx; ++k)
            {
                answer[i][j] += arr1[i][k] * arr2[k][j];
            }
        }
    }
    return answer;
}

비효율적이지 않나 싶었지만 대부분 거의 나와 똑같은 코드더라.

 

행렬의 곱셈에서

arr1        arr2

2 3 3    5 4 3

4 2 4    2 4 1

3 1 4    3 1 1

 

첫번째 계산은 2 * 5 + 3 * 2 + 3 * 3 = 22.

즉 계산이 진행될 때 arr1의 행이 고정이 되어야하고 arr2의 열이 고정이 되어야한다. 두개의 반복문 만으로는 저장이 어렵기 때문에 새로운 k변수를 통해서 고정된 행과 열에서 다음 값의 계산을 진행한다.

반응형