[JS] 이차원 배열

gem·2022년 4월 25일
0

이차원 배열

이차원 배열의 곱셈

이차원 행렬의 곱셈공식

행렬의 결과값

  • 선행렬 : NxM
  • 후행렬 : MxL
  • 선행렬의 열과 후행렬의 행의 갯수가 같아야 곱셈가능 (M == M)
  • 곱셈의 결과물은 선행렬의 행과 후행렬의 열로 맞춰짐 (NxL)

직관적 풀이

 
function solution(arr1, arr2) {
    var answer = [];
  
  	// 곱셈한 결과물을 담을 배열. 0으로 초기화
    arr1.forEach(row => answer.push(Array(arr2[0].length).fill(0)));

  	// 선행렬의 배열 갯수 => 행
    for(let i = 0; i < arr1.length; i++) {
      	// 후행렬 배열 한개의 값 갯수 => 열
        for(let j = 0; j < arr2[0].length; j++) {
          	// 이차원 행열의 곱셈공식
            for(let k = 0; k < arr2.length; k++) {
                answer[i][j] += arr1[i][k] * arr2[k][j];
            }
        }
    }
    
    return answer;
}

메소드 체이닝 활용

  • map
  • reduce
 function solution(arr1, arr2) {
    return arr1.map((row) => arr2[0].map((x,y) => row.reduce((a,b,c) => a + b * arr2[c][y], 0)))
}

헷갈리니까 풀어서 보자

 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개의 댓글