https://school.programmers.co.kr/learn/courses/30/lessons/12949
단순 구현
학부생 시절 자료 구조 시간 Sparse Matrix를 처음 볼 때, 해봤던 행렬의 곱셈이다.
제한 조건에서 항상 곱할 수 있는 행렬로 주어진다고 명시되어 있다.
따라서 AxB 형태의 행렬과 BxC형태의 행렬이 주어짐을 알 수 있다.
결과는 AxC의 형태로 나올 것이다.
A, B, C의 크기를 각각 구해보자.
결과 행렬의 1행 1열의 값을 구하는 과정을 생각해보자.
첫 번재 행렬의 1행과 두 번째 행렬의 1열이 필요하다.
각각의 원소값을 곱하여 더하면 결과를 완성할 수 있다.
결과 행렬의 1행 2열의 값은 구하는 과정도 생각해보자
첫 번재 행렬의 1행과 두 번째 행렬의 2열이 필요하다.
그럼 일반화하자면, 결과행렬의 a행 b열의 값을 구하고자 한다면,
첫 번째 행렬의 a행과 두 번째 행렬의 b열의 값이 필요하고
각각의 원소를 곱하여 더하는 행위가 c번 반복되는것을 알 수 있다.
일반화 된 수식을 코드로 표현해보자.
class Solution {
public int[][] solution(int[][] arr1, int[][] arr2) {
int r = arr1.length;
int c = arr2[0].length;
int m = arr2.length;
int[][] answer = new int[r][c];
for(int i = 0; i < r; ++i)
for(int j = 0; j < c; ++j)
for(int k = 0; k < m; ++k)
answer[i][j] += arr1[i][k] * arr2[k][j];
return answer;
}
}