본문 바로가기
개발/알고리즘

[프로그래머스][LEVEL2] 행렬의 곱셈

by ISA(류) 2021. 9. 1.

# 문제 원문

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

# 문제 풀이

 

행렬의 곱셈.. 행렬 + 행렬의 곱셈 ㅜㅜ,, 그냥 수학문제다. 행렬의 곱셈에 대해서 이해 하는데 시간을 거의 다 쓴거같다.

물론 완전히 이해했다고 보기는 힘든거 같다. 왜 통과한 사람이 6천명 정도 밖에 안되는지 알거같다고 해야하나.. 선형대수를 좀 더 살펴봐야겠다. 하 기초 개념들도 기억 안나는데

 

# 솔루션 플로우

1. arr1를 순회한다.

2. result[rdx][cdx]는 각 arr1[rdx]의 모든 요소를 arr2[rdx]의 모든 요소로 곱한 값들의 합이므로 그 합을 구해준다.

3. 그렇게 구해진 result를 반환한다.

1. FP

function solution(arr1, arr2) {
    return arr1.reduce((result, arr) =>
        [
            ...result,
            arr2[0].map((_, cdx) => arr.reduce((result, current, rdx) => result + current * arr2[rdx][cdx], 0))
        ], []);
}
반응형