해설
행렬의 곱셈 결과는 다음과 같다.
행렬 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;
}
'대딩 > 프로그래머스풀이' 카테고리의 다른 글
[프로그래머스 lv2] 카펫 풀이 (0) | 2022.08.15 |
---|---|
[프로그래머스 lv2] 이진 변환 반복하기 풀이 (0) | 2022.08.14 |
[프로그래머스 lv2] 최댓값과 최솟값 풀이 (0) | 2022.08.14 |
[프로그래머스 lv2] JadenCase 문자열 만들기 풀이 (0) | 2022.08.14 |
[프로그래머스 lv2] N개의 최소공배수 풀이 (0) | 2022.08.13 |
댓글