프로그래머스/2레벨
행렬의 곱셈/C++
Koalitsiya
2023. 1. 4. 15:54
문제 설명
2차원 행렬 arr1과 arr2를 입력받아, arr1에 arr2를 곱한 결과를 반환하는 함수, solution을 완성해주세요.
제한 조건- 행렬 arr1, arr2의 행과 열의 길이는 2 이상 100 이하입니다.
- 행렬 arr1, arr2의 원소는 -10 이상 20 이하인 자연수입니다.
- 곱할 수 있는 배열만 주어집니다.
풀이 방법
처음 풀이할 때 nums에 담는 것이 아니라 answer[i].push_back()을 시도했으나 aborted(core dumped)가 떠서 1차원 벡터에 담은 후 answer에 담아주도록 했다.
1. 3차원 배열을 작성한다.
2. sum에 arr1[i][k]와 arr2[k][j]를 곱한 값을 arr1[0].size()번 더한다.
3. 이후 sum값을 1차원 벡터 nums에 담는 것을 arr2[0].size()번 반복한다.
4. 해당 nums를 answer에 담는 것을 arr1.size()번 반복한다.
5. 이후 answer 리턴
#include <string>
#include <vector>
using namespace std;
vector<vector<int>> solution(vector<vector<int>> arr1, vector<vector<int>> arr2) {
vector<vector<int>> answer;
for(int i = 0; i < arr1.size(); i++){
vector<int> nums;
for(int j = 0; j < arr2[0].size(); j++){
int sum = 0;
for(int k = 0; k < arr1[0].size(); k++){
sum += arr1[i][k]*arr2[k][j];
}
nums.push_back(sum);
}
answer.push_back(nums);
}
return answer;
}