[lv2] 행렬의 곱셈

걸음걸음·2023년 2월 24일
0

Test

목록 보기
7/29

문제링크

  • 2차원 행렬 arr1과 arr2
  • arr1에 arr2를 곱한 결과 반환

행렬의 곱셈

행렬의 곱셈 설명 링크
수식
C[i][j] = A[i][1]B[1][j] + A[i][2]B[2][j] + ... + A[i][n]*B[n][j]

function solution(arr1, arr2) {
    let result = [];
    for(let i = 0; i<arr1.length; i++){
        let newArr = []
        for(let j = 0; j<arr2.length; j++){
          	// A[i][n]B[n][j]의 값을 담을 변수
            let temp = 0;
            for(let n=0; n<arr1[0].length; n++){
                temp += arr1[i][n]*arr2[n][j]
            }
            newArr.push(temp)
        }
        result.push(newArr)
    }
    return result;
}

해당 코드로 돌렸더니 예시의 테스트는 모두 통과했지만 제출 후 실제 테스트는 모조리 틀림
arr1 : [[2, 3, 2], [4, 2, 4], [3, 1, 4]]
arr2 : [[5, 4], [2, 4], [3, 1]]
와 같이 arr2의 배열 길이와 안에 있는 배열의 길이가 다른 케이스 때문
j의 상한을 arr2의 배열 길이가 아니라, arr2의 안에 있는 배열의 길이로 수정

최종 통과 답안

function solution(arr1, arr2) {
    let result = [];
    for(let i = 0; i<arr1.length; i++){
        let newArr = []
        for(let j = 0; j<arr2[0].length; j++){
            let temp = 0;
            for(let n=0; n<arr1[0].length; n++){
                temp += arr1[i][n]*arr2[n][j]
            }
            newArr.push(temp)
        }
        result.push(newArr)
    }
    return result;
}

다른 사람의 풀이

function solution(arr1, arr2) {
    return arr1.map((row) => arr2[0].map((x,y) => row.reduce((a,b,c) => a + b * arr2[c][y], 0)))
}
profile
꾸준히 나아가는 개발자입니다.

0개의 댓글