https://school.programmers.co.kr/learn/courses/30/lessons/12949
2차원 행렬 arr1
과 arr2
를 입력받아, arr1
에 arr2
를 곱한 결과를 반환하는 함수, solution을 완성해주세요.
행렬 arr1, arr2의 행과 열의 길이는 2 이상 100 이하입니다.
행렬 arr1, arr2의 원소는 -10 이상 20 이하인 자연수입니다.
곱할 수 있는 배열만 주어집니다.
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]] |
class Solution {
public int[][] solution(int[][] arr1, int[][] arr2) {
int lena=arr1.length;
int lenb=arr2[0].length;
int[][] answer = new int[lena][lenb];
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;
}
}
행렬 곱의 계산은 nxm , mxk 일 때, nxk로 결과가 나와야 한다.
그러므로, answer
의 크기를 위 처럼 지정해준다.
그리고 행렬의 곱셈을 계산하기 위해서 3중 for문을 써야 한다.
a1 b1 c1 d1
a2 b2 c2 d2
a3 b3
이런식의 행렬이라면,
a1*c1+b1*c2 a1*d1+b1*d2...
이렇게 계산이 되어야 한다.
그러므로, i는 arr1.length까지, j는 arr2[0].length까지 반복을 하며, arr1[0].length까지 k를 돌리면서 계산을 해준다.