newVector[i][j] == (arr1[i][0] * arr2[0][j]) +
(arr1[i][1] * arr2[1][j]) + ... +
(arr1[i][n] * arr2[m][j])
- n: arr1의 열 size
- m: arr2의 행 size
- newVector 크기: arr1의 행 개수 (arr1.size()) * arr2의 열 개수 (즉, arr2[0]의 size)
- 벡터 곱셈 조건:
arr1의 열 개수와arr2의 행 개수가 같아야 함 → 즉,n == m
에러 발생 signal: illegal instruction (core dumped)
#include <string>
#include <vector>
using namespace std;
vector<vector<int>> solution(vector<vector<int>> arr1, vector<vector<int>> arr2)
int newVector_row = arr1.size();
int newVector_column = arr2[0].size();
int max_k = arr1[0].size();
vector<vector<int>> answer;
for (int i = 0; i < newVector_row; i++)
{
for (int j = 0; j < newVector_column; j++)
{
for (int k = 0; k < max_k; k++)
{
answer[i][j] += (arr1[i][k] * arr2[k][j]);
}
}
}
return answer;
}
answer을 초기화 하지 않은 채 접근하려고 해서 segmentation fault 발생#include <string>
#include <vector>
using namespace std;
vector<vector<int>> solution(vector<vector<int>> arr1, vector<vector<int>> arr2) {
int newVector_row = arr1.size();
int newVector_column = arr2[0].size();
int max_k = arr1[0].size();
vector<vector<int>> answer(newVector_row, (vector<int>(newVector_column, 0)));
for (int i = 0; i < newVector_row; i++)
{
for (int j = 0; j < newVector_column; j++)
{
for (int k = 0; k < max_k; k++)
{
answer[i][j] += (arr1[i][k] * arr2[k][j]);
}
}
}
return answer;
}
answer를 arr1의 열 size * arr2의 행 size만큼 0으로 초기화행렬 곱을 할 수 있는 두 행렬의 조건
A 행렬의 크기가 (M * K), B 행려의 크기가 (K * N)일 때, 두 행렬의 곱 연산은 행렬 A의 행 개수(K)와 행렬 B의 열 개수(K)가 같아야 하며 K를 기준으로 곱하기 때문에 행렬 곱 결과는 M * N이 된다.
vector<vector<int>> solution(vector<vector<int>> arr1, vector<vector<int>> arr2)
{
// 1. 최종 행렬 곱의 결과를 저장할 벡터 선언
vector<vector<int>> answer;
// 2. arr1과 arr2의 행렬 곱을 수행했을 때 최종 행렬의 크기만큼 공간을 할당
answer.assign(arr1.size(), (vector<int>(arr2[1].size(), 0)));
// 3. arr1의 각 행과 arr2의 각 열에 대해 반복문 수행
for (int i = 0; i < arr1.size(); i++)
for (int j = 0; j < arr2[1].size(); j++)
for (int k = 0; k < arr2.size(); k++)
answer[i][j] += (arr1[i][k] * arr2[k][j]); // 4. 두 행렬의 곱을 수행
return answer;
}
💡
vector.assign()함수를 통해서도 공간 할당 가능
assign() 사용법기본 문법
void assign(size_type count, const T& value);