[12949] 행렬의 곱셈 ⭐⭐
태그: cpp, Programmers
카테고리: Programmers
https://school.programmers.co.kr/learn/courses/30/lessons/12949
난이도 ⭐⭐
문제
너무 오랜만에 푸는 코테라 책(https://www.aladin.co.kr/shop/wproduct.aspx?ItemId=338520895)을
한 권 잡고 천천히 풀어나가는 중이다. 책에서 풀어보라고 제시한 문제였음.
나의 풀이
-
행렬의 크기가 3x2, 2x3 일 경우 행렬의 곱셈을 한다면, 앞의 행렬의 행과 뒤의 행렬의 열이 합쳐져서 3x3의 행렬이 생성된다.
-
행렬의 곱셈을 계산해야 할 땐 인덱스가 3가지 필요하다.
한 행렬 arr1의 크기를 가리키는 인덱스, 다른 행렬 arr2의 크기를 가리키는 인덱스,
그리고 행렬 간 연산을 하면서 곱해지는 인덱스가 0 -> 1 - > 2 … 이렇게 움직여져야 하는데
이 이동을 가리키는 인덱스로 총 3가지가 필요하다.
([0][0] * [0][0], [0][1] * [1][0], [0][2] * [2][0])
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <string>
#include <vector>
using namespace std;
vector<vector<int>> solution(vector<vector<int>> arr1, vector<vector<int>> arr2)
{
vector<vector<int>> answer;
answer.assign(arr1.size(), vector<int>(arr2[0].size(), 0));
for (int i = 0; i < arr1.size(); i++)
{
for (int j = 0; j < arr2[0].size(); j++)
{
for (int k = 0; k < arr2.size(); k++)
{
answer[i][j] += arr1[i][k] * arr2[k][j];
}
}
}
return answer;
}
댓글남기기