프로그래머스/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;
}