728x90
URL : 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]] |
◆ JS
계획
반복문 돌리기 - 3회
1. arr1의 행의 개수
2. 곱한 값 더하기
3. arr2의 행의 개수(= arr1 각 행의 열 개수)만큼 반복하면서 행렬을 곱하기
참고, 풀이
답
function solution(arr1, arr2) {
var answer = [];
// arr1의 행의 수
for (let i = 0; i < arr1.length; i++) {
const row = [];
// arr2의 열의 수
for (let j = 0; j < arr2[0].length; j++) {
let sum = 0;
//내적 계산
for (let k = 0; k < arr1[0].length; k++) {
sum += arr1[i][k] * arr2[k][j];
}
row.push(sum);
}
answer.push(row);
}
return answer;
}
코드 간략화하기
function solution(arr1, arr2) {
return arr1.map((row, i) =>
arr2[0].map((_, j) =>
row.reduce((sum, val, k) => sum + val * arr2[k][j], 0)
)
);
}
참고
행렬의 곱셈 : https://mathbang.net/562#google_vignette
'코딩 테스트 > 알고리즘' 카테고리의 다른 글
알고리즘 87번 - n^2 배열 자르기 js (0) | 2025.04.11 |
---|---|
86번 - H-Index js (0) | 2025.03.23 |
알고리즘 85번 - 연속 부분 수열 합의 개수 (0) | 2025.03.04 |
알고리즘 84-괄호 회전하기 (0) | 2025.02.28 |
알고리즘 83 -귤 고르기 (0) | 2025.02.25 |