코딩테스트/프로그래머스
[레벨 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변수를 통해서 고정된 행과 열에서 다음 값의 계산을 진행한다.
반응형