반응형
행렬의 곱셈
문제 설명
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]] |
[[1, 2, 3], [4, 5, 6]] | [[1, 4], [2, 5], [3, 6]] | [[14, 32], [32, 77]] |
코드 해석 및 전체 코드
1. 행렬의 곱셈으로 나오는 행렬로 answer의 크기 잡음 m*k * k*n --> m*n
2. 삼중 for문으로 바깥 for문은 answer의 행만큼 반복
3. 중간 for문은 answer의 열만큼 반복
4. 안쪽 for문은 arr2의 행만큼 반복
행열곱셈 배열 a1과 a2를 곱하는 것은 a1의 행과 a2의 열을 곱하는 것을 말함
코드를 짜기 위해 a1 배열 어디와 a2 배열 어디가 곱해서 나오는 값을 answer 배열 어디에 저장하는지 직접 구해보면 풀 수 있음.
예시 1로 직접 문제를 풀어보자면,
arr1[0][0] * arr2[0][0] // 3 + arr1[0][1] * arr2[1][0] // 12 = 15 |
arr[0][0] * arr[1][0] //3 + arr[0][1] * arr[1][1] //12 = 15 |
arr[1][0] * arr[1][1] // 9 + arr1[1][0] * arr[1][0] // 6 = 15 |
arr[1][0] * arr[1][1] // 9 + arr[0][1] * arr[1][1] // 6 = 15 |
arr[2][0] * arr[2][1] // 12 + arr1[1][0] * arr[1][0] // 3 = 15 |
arr[2][0] * arr[2][1] // 12 + arr[0][1] * arr[1][1] // 3 = 15 |
3중 for문을 돌리면서 주어진 변수를 활용하여 이차원 배열 어디에 넣어야 반복되어 값을 곱하고 더해 저장하는 지 알 수 있다.
arr1[i][k] * arr[k][j] |
class Solution {
public int[][] solution(int[][] arr1, int[][] arr2) {
// m*k * k*n --> m*n
int[][] answer = new int[arr1.length][arr2[0].length];
// System.out.println(answer.length); // 3
// System.out.println(answer[0].length); // 2
// i : answer.length == 3
// j : answer[0].length == 2
// k : arr2.length == 2
for(int i = 0; i < answer.length; i++){
for(int j = 0; j < answer[0].length; j++){
int sum = 0;
for(int k = 0; k < arr2.length; k++){
sum += arr1[i][k] * arr2[k][j];
//System.out.println("i : " + i + " j : " + j + " k : " + k + " sum : " + sum);
}
answer[i][j] = sum;
}
}
return answer;
}
}
반응형
'코딩 테스트 > [JAVA] programmers 코딩 테스트 연습' 카테고리의 다른 글
[Programmers/JAVA] 최댓값과 최솟값 / 프로그래머스 코딩 테스트 연습 (0) | 2021.12.25 |
---|---|
[Programmers/JAVA] 최솟값 만들기 / 프로그래머스 코딩 테스트 연습 (0) | 2021.12.24 |
[Programmers/JAVA] 피보나치 수 / 프로그래머스 코딩 테스트 연습 (0) | 2021.12.22 |
[Programmers/JAVA] JadenCase 문자열 만들기 / 프로그래머스 코딩 테스트 연습 (0) | 2021.12.21 |
[Programmers/JAVA] N개의 최소공배수 / 프로그래머스 코딩 테스트 연습 (0) | 2021.12.20 |
댓글