본문 바로가기
대딩/프로그래머스풀이

[프로그래머스 lv2] 행렬의 곱셈 풀이

by 경아ㅏ 2022. 8. 14.

 프로그래머스의 모든 문제와 해설 보기[클릭]

 

해설

 

행렬의 곱셈 결과는 다음과 같다.

 

출처: 위키백과

 

행렬 A의 크기가 l * m, 행렬 B의 크기가 m * n 라 할 때, 행렬 A * B 의 크기는 l * n 가 된다.

행렬 A*B의 i행, j열 원소(AB[i][j])는 행렬 A의 i행과 행렬 B의 j열의 원소들을 각각 곱하여 모두 더한 값이 된다.

 

예를 들어,

행렬 A의 0번째 행이 [1, 4] 이고 행렬 B의 0번째 열이 [3, 3] 일 때, AB[0][0] = 1*3 + 4*3 = 15가 된다.

 

크기가 l * m 인 새로운 행렬 AB에 대하여 모든 원소의 값을 구해주면 정답이다. 

 

 

코드

#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <tuple>
#include <vector>
#include <stack>
#include <queue>
#include <deque>
#include <set>
#include <map>
#include <unordered_set>
#include <unordered_map>
#include <cctype>
#include <iostream>

using namespace std;
using ii = pair<int, int>;
using iii = tuple<int, int, int>;

#define X first
#define Y second

vector<vector<int>> solution(vector<vector<int>> arr1, vector<vector<int>> arr2) {
    
    int r1 = arr1.size();
    int c1 = arr1[0].size();
    int r2 = arr2.size();
    int c2 = arr2[0].size();
    
    vector<vector<int>> v(r1, vector<int>(c2));
    for (int i=0; i<r1; i++) {
        for (int j=0; j<c2; j++) {
            for (int k=0; k<c1; k++)
                v[i][j] += arr1[i][k]*arr2[k][j];
        }
    }
    return v;
}

 

댓글