행렬의 곱셈

문제정의


두 행렬 arr1, arr2가 주어질 때 arr1에 arr2가 곱해진 결과를 반환하는 문제이다.

문제풀이


전체 코드는 다음과 같다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
package level2;

public class MatrixMultiply {

//프로그래머스 문제풀이 level2 행렬의 곱셈
public static void main(String[] args) {
int[][] arr1 = {
{1, 4},
{3, 2},
{4, 1}
};
int[][] arr2 = {
{3, 3},
{3, 3}
};
int[][] answer = new int[arr1.length][arr2[0].length];
for(int r = 0; r < arr1.length; r++)
{
for(int c = 0; c < arr2[0].length; c++)
{

int temp = 0;

for(int idx = 0; idx < arr1[0].length; idx++)
temp += arr1[r][idx] * arr2[idx][c];

answer[r][c] = temp;
}
}
}

}

행렬의 곱셈을 안다면 그대로 코드에 옮기면 된다.

시간복잡도는 arr1의 크기를 nxc라 하고 arr2의 크기를 cxm이라 할 때 \(O(cnm)\)이다.

테스트