· 문제 설명
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]] |
· Thinking 1
arr1에 arr2를 곱한 결과 = A[i][1] * B[1][j] + A[i][2] * B[2][j] + ... + A[i][n] * B[n][j]
예제 1의
arr1 = [3][2]
arr2 = [2][2]
return[0][0] = 15
return[0][1] = 15
return[1][0] = 15
return[1][1] = 15
return[2][0] = 15
return[2][1] = 15
return[0][0] = A[0][0]*B[0][0] + A[0][1]*B[1][0] =15
return[0][1] = A[0][0]*B[0][1] + A[0][1]*B[1][1] =15
return[1][0] = A[1][0]*B[1][0] + A[1][1]*B[1][0] =15
return[1][1] = A[1][0]*B[1][1] + A[1][1]*B[1][1] =15
예제 2의
arr1 = [3][3]
arr2 = [3][3]
return[0][0] = 22
return[0][1] = 22
return[0][2] = 11
return[1][0] = 36
return[1][1] = 28
return[1][2] = 18
return[2][0] = 29
return[2][1] = 20
return[2][2] = 14
return[0][0] = A[0][0] * B[0][0] + A[0][1] * B[1][0] + A[0][2]*B[2][0]=22
return[0][1] = A[0][0] * B[0][1] + A[0][1] * B[1][1] + A[0][2]*B[2][1]=22
return[0][2] = A[0][0] * B[0][2] + A[0][1] * B[1][2] + A[0][2]*B[2][2]=11
· 완성 코드
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++) {
int len = 0;
while(len < arr2.length) {
answer[i][j] += arr1[i][len]*arr2[len][j];
len++;
}
}
}
return answer;
}
}
· 문제 출처
댓글