문제 : 행렬의 곱셈
문제 설명
2차원 행렬 arr1과 arr2를 입력받아, arr1에 arr2를 곱한 결과를 반환하는 함수, solution을 완성해주세요.
제한 조건
- 행렬 arr1, arr2의 행과 열의 길이는 2 이상 100 이하입니다.
- 행렬 arr1, arr2의 원소는 -10 이상 20 이하인 자연수입니다.
- 곱할 수 있는 배열만 주어집니다.
입출력 예
arr1 | arr2 | return |
[[1, 4], [3, 2], [4, 1]] | [[3, 3], [3, 3]] | [[15, 15], [15, 15], [15, 15]] |
[[2, 3, 2], [4, 2, 4], [3, 1, 4]] | [[5, 4, 3], [2, 4, 1], [3, 1, 1]] | [[22, 22, 11], [36, 28, 18], [29, 20, 14]] |
분석
행렬의 곱셈 과정을 그대로 적용해서 for문을 통해 계산하면 된다.
인덱스 설정에만 주의하자.
구현
using namespace std;
vector<vector<int>> solution(vector<vector<int>> arr1, vector<vector<int>> arr2)
{
vector<vector<int>> answer;
for (size_t i = 0; i < arr1.size(); i++)
{
vector<int> row;
for (size_t j = 0; j < arr2[0].size(); j++)
{
int row_tmp = 0;
for (size_t n = 0; n < arr1[i].size(); n++)
{
row_tmp += arr1[i][n] * arr2[n][j];
}
row.push_back(row_tmp);
}
answer.push_back(row);
}
return answer;
}
int main()
{
vector<vector<int>> arr1 = { {1,4},{3,2},{4,1} };
vector<vector<int>> arr2 = { {3,3},{3,3} };
vector<vector<int>> ans = solution(arr1, arr2);
/*
15 15
15 15
15 15
*/
for (size_t i = 0; i < ans.size(); i++)
{
for (size_t j = 0; j < ans[0].size(); j++)
{
cout << ans[i][j] << ' ';
}putchar('\n');
}
return 0;
}
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스 C++] N개의 최소공배수 (0) | 2021.02.15 |
---|---|
[프로그래머스 C++] JadenCase 문자열 만들기 (0) | 2021.02.14 |
[프로그래머스 C++] 피보나치 수 (0) | 2021.02.12 |
[프로그래머스 C++] 최솟값 만들기 (0) | 2021.02.11 |
[프로그래머스 C++] 최댓값과 최솟값 (0) | 2021.02.10 |