본문 바로가기

코딩테스트

[프로그래머스] level2. 행렬의 곱셈 (javascript)

반응형

문제

2차원 행렬 arr1과 arr2를 입력받아, arr1에 arr2를 곱한 결과를 반환하는 함수, solution을 완성해주세요.

제한 조건
행렬 arr1, arr2의 행과 열의 길이는 2 이상 100 이하입니다.
행렬 arr1, arr2의 원소는 -10 이상 20 이하인 자연수입니다.
곱할 수 있는 배열만 주어집니다.

나의 풀이

function solution(arr1, arr2) {
    var answer = [];

    let X = arr1.length;
    let Y = arr2[0].length;

    for(let i =0; i < X;i++){
        let tmp =[]
        for(let j =0; j < Y;j++){
            tmp.push(arr1[i].reduce((acc,cur,index)=>acc += cur*arr2[index][j],0))
        }
        answer.push(tmp)
    }

    return answer;
}

괜히 어렵게 한번에 처리 하려다가 시간이 오래 걸렸다.
헷갈릴 수록 기본 개념에 기반해서, 정해진 위치에 정해진 답이 들어가도록 먼저 구성하는게 맞는 것 같다.

다른이의 풀이

function solution(arr1, arr2) {
    return arr1.map((row) => arr2[0].map((x,I) => row.reduce((acc,cur,index) => acc + cur * arr2[index][I], 0)))

map 내부에서 외부 변수를 끌어들여서 이렇게 쓸 수 있다는걸 알 수 있었다.

반응형