본문 바로가기
코딩 문제/프로그래머스 [ JavaScript ]

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

by CODESIGN 2022. 10. 3.

https://school.programmers.co.kr/learn/courses/30/lessons/12949

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

문제 설명


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

 

 

나의 문제 풀이


코드에 풀이를 적어 두었습니다.

 

function solution(arr1, arr2) {
	var answer = [];
    var tmpAnswer = [];
    var sum = 0;
    for (let k = 0; k < arr1.length; k++) { // arr1의 값을 가져오는데 사용
    	for (let i = 0; i < arr2[0].length; i++) { // arr2의 가로값
        	for (let j = 0; j < arr2.length; j++) { // arr1의 가로로 값을, arr2의 세로로 값을 가져온다
            	sum += arr1[k][j] * arr2[j][i]; //한 배열의값이 다 더해진 후
            }
            tmpAnswer.push(sum); // tmpAnswer에 저장후
            sum = 0; // sum을 리셋한다
        }
        answer.push(tmpAnswer); // 더해진 값들을 answer 배열에 저장한뒤
        tmpAnswer = []; // tmpAnswer의 배열도 새로운 값들로 저장하기위해 리셋해준다.
    }
    return answer;
}

 

 

 

다른 풀이


정말 간결하게 잘 푼 코드다.

나는 for loop으로 값들을 더했다면 이 코드에서는 reduce()를 사용하여 값들을 더해준 뒤 

결과값을 return 하였다.

 

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

 

 

 

댓글