Lv2_행렬의 곱셈

Eugenius1st·2022년 9월 2일
0

Programmers_JavaScript

목록 보기
26/30
post-thumbnail

Lv1_행렬의 곱셈

문제

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

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

풀이

  • 아 행렬의 곱은 이렇게 [a,b]x[c,d] = [axd] 커지는구나
  • 삼중for문 돌려야 겠다.

코드1

function solution(arr1, arr2) {
  var answer = Array.from({length:arr1.length},()=>Array.from({length:arr2[0].length},()=>0));
  let row, col, res;
  	for(let x = 0; x < arr1.length; x++){
      for(let y = 0; y < arr2[0].length;y++){
        res = 0
        for(let z = 0 ; z< arr2.length;z++){
        row = arr1[x][z]; 
        col = arr2[z][y];
        res +=row*col;
        }
        answer[x][y] = res;
      }
    }
    return answer;
}

코드2(비슷함)

function solution(arr1, arr2) {
  let row, col, tmp, res;
  const answer = [];
  	for(let x = 0; x < arr1.length; x++){
      tmp=[];
      for(let y = 0; y < arr2[0].length;y++){
        res = 0
        for(let z = 0 ; z< arr2.length;z++){
        row = arr1[x][z]; 
        col = arr2[z][y];
        // console.log(row,col)
        res +=row*col;
        }
        tmp.push(res);
      }
      answer.push(tmp);
    }
    return answer;
}

배운것

  • 배열 처음부터 초기화 하나, push 작업 거치나 속도에는 큰 차이가 없다.
    테스트 11과 테스트 14를 비교해봐라. 1초 정도 차이가 나는데
  • 걸린 속도
    테스트 11은 코드1 < 코드 2
    테스트 14는 코드 1 > 코드 2
profile
최강 프론트엔드 개발자가 되고싶은 안유진 입니다

0개의 댓글