코딩 테스트/프로그래머스(LV2)

[프로그래머스] 행렬의 곱셈 (LV2 - JavaScript)

dev-hpk 2024. 11. 12. 00:02
 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

1. 문제

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

 

2. 정답 풀이

풀이 전략

    행렬곱 계산 방법대로 로직 작성 
 

행렬곱

Matrix Multiplication 행렬 의 곱셈은 여타 행렬의 연산과 같이 '크기가 맞는' 경우에만 정의되는데

namu.wiki

  • m x r, r x n 행렬을 곱하면 m x n 행렬 리턴

행렬 곱 풀이

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

 

 

 
반복문을 3번이나 쓰니까 너무 헷갈린다. 더 직관적이고 간단한 방법은 없나...🙄🙄
 

 

 

[프로그래머스] 할인 행사 (LV2 - JavaScript)

프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 1. 문제XYZ 마트는 일정한 금액을 지불하면 10일 동안 회원 자격을 부여합

dev-hpk.tistory.com

 

 

[프로그래머스] n^2 배열 자르기 (LV2 - JavaScript)

프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 1. 문제정수 n, left, right가 주어집니다. 다음 과정을 거쳐서 1차원 배열을

dev-hpk.tistory.com