Publish:

태그: ,

카테고리:

https://school.programmers.co.kr/learn/courses/30/lessons/12949
난이도 ⭐⭐

문제

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;
}

이슈 및 공부한 것을 기록해두는 개인 블로그 입니다. 댓글, 피드백 환영합니다 🙂

Update:

댓글남기기