https://programmers.co.kr/learn/courses/30/lessons/12949
[ 문제 설명 ]
2차원 행렬 arr1과 arr2를 입력받아, arr1에 arr2를 곱한 결과를 반환하는 함수, solution을 완성해주세요.
[ 제한 사항 ]
[ 입출력 예시 ]
arr1 | arr2 | return |
---|---|---|
[[1, 4] [3, 2] [4, 1]] | [[3, 3] [3, 3]] | [[15, 15] [15, 15] [15, 15]] |
[[2, 3, 2] [4, 2, 4] [3, 1, 4]] | [[5, 4, 3] [2, 4, 1] [3, 1, 1]] | [[22, 22, 11] [36, 28, 18] [29, 20, 14]] |
- arr1(M x N)크기의 행렬과 arr2(P x Q)크기의 행렬을 곱하면 (M * Q)크기의 행렬이 나온다.
따라서 answer의 배열 크기는 answer[arr1.length]arr2[0].length] 로 선언해주었다.
- 행렬의 곱셈 공식을 통해 보면 전체적으로 arr1의 행의 길이만큼 곱셈이 이루어지는데, 이를 arr2의 열들이랑 곱해 줄 것이다. 근데 또 그 안에서 연산이 이루어져야한다. 근데 요소 값들을 구분 해야하므로 총 삼중 for문을 돌려 해줄 것이다.
- 행렬의 곱셈을 이용하여 나온 값들을 answer배열에 넣어주어 최종 answer배열을 반환해준다.
class Solution {
public int[][] solution(int[][] arr1, int[][] arr2) {
int[][] answer = new int[arr1.length][arr2[0].length];
for(int i=0; i<arr1.length; i++) {
for(int j=0; j<arr2[0].length; j++) {
for(int k=0; k<arr1[0].length; k++) {
answer[i][j] += arr1[i][k] * arr2[k][j];
}
}
}
return answer;
}
}