본문 바로가기
Developer/Algorithm

프로그래머스 코딩테스트 연습 Level 2 - 행렬의 곱셈 (JavaScript)

by roqkfrlfhr 2022. 5. 27.

프로그래머스 코딩테스트 연습 Level 2 - 행렬의 곱셈 (JavaScript)

 

Programmers(프로그래머스)의 코딩테스트 연습문제 Level 2 중,

[행렬의 곱셈] 문제를 JavaScript를 사용하여 해결해 보도록 하겠습니다.

 

문제

문제 설명

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]]  

 

작성한 답

solution.js

function solution(arr1, arr2) {
    return arr1.map((arr1Row) => 
        arr2[0].map((_, arr2ColIdx) => 
            arr1Row.reduce((ac, arr1V, arr1ColIdx) => ac + arr1V * arr2[arr1ColIdx][arr2ColIdx], 0)));
}

 

설명

행렬의 곱셈의 결과로 나오는 행렬의 행의 개수는 첫번째 행렬의 행의 개수와 같고,

행렬의 곱셈의 결과로 나오는 행렬의 열의 개수는 두번째 행렬의 열의 개수와 같다는 점을 생각하신다면

조금 더 편하게 해결하실 수 있으리라 생각됩니다.

 

결과물의 행의 개수는 arr1의 행의 개수와 같을 것이므로 arr1에 map을 사용하여 행을 개수를 맞추면서 내부를 채우기 시작합니다.

결과물의 열의 개수는 arr2의 열의 개수와 같을 것이므로 arr1에 map을 사용한 내부에서 arr2의 첫번째 행에 map을 사용하여 열을 개수를 맞출 수 있습니다.

 

그리고 그 안에서는 이제 reduce를 사용하여 각각의 자리에 맞는 값을 구하여 삽입해줄 수 있습니다.

입출력 예 #1 행렬 곱셈 과정 그림 (출처 : 본인 그림)

입출력 예 #1 의 행렬의 곱이 진행되는 과정을 직접 그려 보았습니다.

reduce가 작동하는 방식의 이해를 조금이라도 돕기위해 직접 색으로 구분지어주며 그렸습니다.

(글씨체와 그림의 완성도는 이해 부탁드립니다..)

 

이렇게 곱셈이 완료된 행렬을 반환하여 문제를 해결할 수 있습니다.

 

 

 

도움이 되셨다면 공감, 댓글 부탁드립니다!

궁금하신 점이나 요청사항은 언제든지 말씀해주세요!

피드백도 언제나 환영입니다!

 

감사합니다.


댓글