안녕하세요
프로그래머스 JS [행렬의 곱셈] 본문
- 행렬의 곱셈
문제 설명
2차원 행렬 arr1과 arr2를 입력받아, arr1에 arr2를 곱한 결과를 반환하는 함수, solution을 완성해주세요.
제한 조건- 행렬 arr1, arr2의 행과 열의 길이는 2 이상 100 이하입니다.
- 행렬 arr1, arr2의 원소는 -10 이상 20 이하인 자연수입니다.
- 곱할 수 있는 배열만 주어집니다.
[[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]] |
행렬의 곱셈 방법
a1 | b1 | c1 | ㄱ1 | ㄱ2 | |
a2 | b2 | c2 | X | ㄴ1 | ㄴ2 |
ㄷ1 | ㄷ2 |
🔻
a1ㄱ1 + b1ㄴ1 + c1ㄷ1 | a1ㄱ2 + b1ㄴ2 + c1ㄷ2 |
a2ㄱ2 + b2ㄴ2 + c3ㄷ2 | a2ㄱ2 + b2ㄴ2 + c2ㄷ2 |
3x2 행렬 * 2x3 행렬 => 2x2 행렬
for (let j = 0; j < arr2[0].length; j++) { 두번째 for 문에서 처음에는 arr2.length로 설정했을 때 test를 통과했지만 실제 제출할 때는 모든 문제에서 실패했다. 원인은 테스트에서 주어지는 행렬은 정사각형 형태로 arr2.length와 arr2[0].length가 항상 같기 떄문이었다. |
function solution(arr1, arr2) {
var answer = [];
for (let i = 0; i < arr1.length; i++) {
const answerArray = [];
for (let j = 0; j < arr2[0].length; j++) {
let element = 0;
for (let k = 0; k < arr2.length; k++) {
element += arr1[i][k] * arr2[k][j];
}
answerArray.push(element);
}
answer.push(answerArray);
}
return answer;
}
solution(
[
[1, 4],
[3, 2],
[4, 1],
],
[
[3, 3],
[3, 3],
]
);
// 1 4 | 3 3 => 15 | 15
// 3 2 | 3 3 => 15 | 15
// 4 1 | => 15 | 15
|
'프로그래머스 > Lv.2' 카테고리의 다른 글
프로그래머스 JS [튜플] (0) | 2022.11.28 |
---|---|
프로그래머스 JS [괄호 회전하기] (0) | 2022.11.27 |
프로그래머스 JS [H-Index] (0) | 2022.11.26 |
프로그래머스 JS [점프와 순간 이동] (0) | 2022.11.26 |
프로그래머스 JS [N개의 최소공배수] (0) | 2022.11.26 |