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

쿼카쿼카·2023년 2월 20일
0

알고리즘

목록 보기
34/67

코드

function solution(arr1, arr2) {
    const ans = [];
    
    for(let i=0; i<arr1.length; i++) {
        const result = [];
        for(let j=0; j<arr2[0].length; j++) {
            let sum = 0;
            for(let k=0; k<arr2.length; k++) {
                sum += arr1[i][k]*arr2[k][j]
            }
            result.push(sum);
        }
        ans.push(result);        
    }
    return ans;
}

아니

  • 어릴 때 내가 기탄수학 겁나 풀었음. 나름 암산왕이라고 생각하고 이거 암산으로 풀려고 했다가 뇌가 런타임 에러나면서 머리 빠지는데 프로그래머스 탈모약 지원해주냐?
  • 사실 암산왕이 아니었던 거임....ㅠㅠㅠㅠ

풀이

  • 일단 산뜻하게 삼중 for문으로 시작했어요.

  • 학창시절 수면 공부법을 지향하던 나는 잠결에 행렬의 곱셈은 앞 행렬의 열과 뒷 행렬의 행은 갯수가 같아야 곱셈이 성립한다라고 하는 내용을 아직도 기억하다니 기특해요^___^

  • 암튼 이때의 기억을 살려 그림판에 그림을 그려보았죠!!??

  • 세상에 마상에 난 마지막 for인 k가 당연히 arr2[0][k]라고 생각했는디 사실 앞 행렬의 열과 뒷 행렬의 행이 k였던 거라~~

  • 정리하자면

    • 첫 for의 i는 앞 arr1의 길이(행)
    • 두 번째 for의 j는 arr2[0]의 길이(열)
    • 마지막 for의 k가 arr1[0].length 혹은 arr2.length (앞 행렬의 열 혹은 뒷 행렬의 행)
  • 그림으로 친절하게 그려주신 분이 있어 소개합니다.

참고 사이트

https://velog.io/@sisofiy626/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-Lv.2-%ED%96%89%EB%A0%AC%EC%9D%98-%EA%B3%B1%EC%85%88-JavaScript

profile
쿼카에요

0개의 댓글