본문 바로가기
코딩테스트/프로그래머스

[프로그래머스] 행렬의 곱셈 - 자바스크립트

by 핸디(Handy) 2021. 8. 30.

[ 문제 설명 ]

 

코딩테스트 연습 - 4주차

개발자가 사용하는 언어와 언어 선호도를 입력하면 그에 맞는 직업군을 추천해주는 알고리즘을 개발하려고 합니다. 아래 표는 5개 직업군 별로 많이 사용하는 5개 언어에 직업군 언어 점수를 부

programmers.co.kr


[ 아이디어 ]

  1. 일단 answer 배열에 크기에 맞게 0으로 초기화
  2. 2중 for문으로 돌고 각 행렬의 곱셈은 배열 메소드 체이닝을 통해 처리

[ 코드 ]

function solution(arr1, arr2) {
  var answer = Array.from(Array(arr1.length), () => Array(arr2[0].length).fill(0));

  for (let i = 0; i < arr1.length; i++) {
    for (let j = 0; j < arr2[0].length; j++) {
      answer[i][j] = arr1[i].map((item, index) => item * arr2[index][j]).reduce((a, b) => a + b, 0);
    }
  }

  return answer;
}

 

[ 다른 분 코드 ]

1. 극강의 메소드 체이닝을 활용한 예

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

 

2. 가장 직관적인 3중 for문 예

function solution(arr1, arr2) {
    var answer = [];
    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;
}

 

 


댓글