프로그래머스 > 코딩테스트 연습 > 연습문제 > 행렬의 곱셈
function solution(arr1, arr2) {
let answer = new Array();
for (let k = 0; k < arr1.length; k++) {
answer[k] = new Array();
for (let i = 0; i < arr2[0].length; i++) {
answer[k][i] = 0;
for (let j = 0; j < arr2.length; j++) {
answer[k][i] += arr1[k][j] * arr2[j][i];
}
}
}
return answer;
}
테스트 1 〉 통과 (4.39ms, 33MB)
테스트 2 〉 통과 (7.77ms, 34MB)
테스트 3 〉 통과 (14.96ms, 34.8MB)
테스트 4 〉 통과 (4.17ms, 33.1MB)
테스트 5 〉 통과 (13.76ms, 34.3MB)
테스트 6 〉 통과 (7.67ms, 34.4MB)
테스트 7 〉 통과 (1.13ms, 30.5MB)
테스트 8 〉 통과 (0.89ms, 30.6MB)
테스트 9 〉 통과 (0.40ms, 30.7MB)
테스트 10 〉 통과 (7.12ms, 34MB)
테스트 11 〉 통과 (4.42ms, 33MB)
테스트 12 〉 통과 (0.59ms, 30.5MB)
테스트 13 〉 통과 (5.47ms, 34.4MB)
테스트 14 〉 통과 (8.95ms, 34.1MB)
테스트 15 〉 통과 (6.31ms, 33.4MB)
테스트 16 〉 통과 (4.14ms, 33.6MB)
예제 테스트 케이스 2번으로 예시를 들면 3 * 3 배열과 3 * 3 배열의 곱셈은 아래와 같다
수학적 행렬의 곱셈은 (x * m) * (n * y) = (m * n)의 배열이 나오지만, 코딩에서 2차원 배열을 통한 행렬의 곱셈은 (m * x) * (y * n)으로 표현이 된다.
이 점을 주의하면서 문제를 풀면 된다.
코드에는 총 3개의 for문이 나온다.
① for (let k = 0; k < arr1.length; k++) { ② for (let i = 0; i < arr2[0].length; i++) { ③ for (let j = 0; j < arr2.length; j++) {
각 for문이 어떤 반복을 하는지를 파악하면서 작성하면 수월하게 접근할 수 있을 것이다.