2차원 행렬 arr1과 arr2를 입력받아 arr1에 arr2를 곱한 결과를 반환하는 solution( ) 함수를 완성하세요.
제약조건
- 행렬 arr1, arr2의 행과 열의 길이는 2 이상 100 이하입니다.
- 행렬 arr1, arr2의 데이터는 -10 이상 20 이하인 자연수입니다.
- 곱할 수 있는 배열만 주어집니다
입출력의 예
풀이 과정
해당 문제를 풀기 위해선 행렬의 곱셈에 대해 알아야한다.
행렬의 곱셈은 결과적으로 A의 세로 길이와 B의 가로 길이 값을 갖는 행렬이 만들어진다
그러므로
해당 배열에서는 행렬 곱 C는 M*N 행렬로 정의된다
해당 C의 값은 다음과 같이 쓸수 있다
그리고 이 풀이를 그대로 java에 이식하면 원하는 결과가 나오게된다
최대 데이터 개수가 100개이므로 시간복잡도에 대해서는 생각하지 않아도되며
행렬에는 곱할 수 있는 배열만 주어지기 때문에 예외처리를 하지 않아도된다
풀이
class Solution {
public int[][] solution(int[][] arr1, int[][] arr2) {
// m*p
int[][] answer = new int[arr1.length][arr2[0].length];
// cij = 시그마 a[i][k]*b[k][j]
for(int i=0; i<answer.length; i++){
for(int j=0; j<answer[i].length; j++){
for(int k=0; k<arr2.length; k++){
answer[i][j] += arr1[i][k]*arr2[k][j];
}
}
}
return answer;
}
}
>> 해당 시간 복잡도 O(N^3)
'programmers' 카테고리의 다른 글
[JAVA] # 표 편집 (0) | 2024.08.01 |
---|---|
[JAVA] 방문 길이 (0) | 2024.08.01 |
[JAVA] 모의고사 (0) | 2024.07.31 |
[JAVA] 두 개 뽑아서 더하기 (0) | 2024.07.31 |
[JAVA] [3차] 압축 (0) | 2024.07.26 |