프로그래머스 2단계 - 행렬의 곱셈 본문
반응형
2 단계 : 행렬의 곱셈
코딩테스트 연습 > 연습문제 > 행렬의 곱셈
문제 설명
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]] |
반응형
코드
function solution(arr1, arr2) {
const [row, col] = [arr1.length, arr2[0].length];
let answer = new Array(row);
for (let i = 0; i < row; i++) answer[i] = new Array(col);
// [[emptyset], [emptyset], [emptyset]
for (let i = 0; i < row; i++) { // 1,2,3
for (let j = 0; j < col; j++) { // 1,2
// reduce(누적값, 현재값, 현재 인덱스 값);
answer[i][j] = arr1[i].reduce((sum, arr1Value, rowIndex) => {
return sum + (arr1Value * arr2[rowIndex][j]);
}, 0)
}
}
return answer;
}
리뷰
순서는 다음과 같다
1. 공식이 있습니다. 두 행렬의 곱셈은 (m * k)행렬 * (k * n)행렬은 k가 같은 수여야지만 곱할 수 있습니다.
2. 또한 결과는 m * n 행렬이 나오게 됩니다. 따라서 row, col을 셋팅합니다.
3. 행렬의 곱셈은 m * k 행렬의 첫번째 행과 k * n 의 첫번째 열을 곱합니다.
4. 따라서 arr1[0]의 첫번째 원소와 arr2[현재인덱스][j] 값을 해줘야 계산이 됩니다.
5. 다음은 arr1[0[의 다음 원소와 arr2[현재인덱스][증가한j 값] 이렇게 곱해주면 되죠? 이걸 계속 반복합니다.
총평 : 머릿속에서 잘 그려지지 않네요.
반응형
'알고리즘 > 2단계' 카테고리의 다른 글
프로그래머스 2단계 - 튜플 (6) | 2022.12.01 |
---|---|
프로그래머스 2단계 - 괄호 회전하기 (0) | 2022.11.30 |
프로그래머스 2단계 - 캐쉬 [1차] (3) | 2022.11.28 |
프로그래머스 2단계 - 멀리 뛰기 (2) | 2022.11.25 |
프로그래머스 2단계 - 점프와 순간 이동 (0) | 2022.11.24 |
Comments