본문 바로가기
알고리즘/프로그래머스

[프로그래머스] Lv2. 행렬의 곱셈

by 1two13 2023. 3. 29.
728x90
반응형

문제 링크


 

프로그래머스

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

programmers.co.kr

 

조건


  • 곱할 수 있는 배열만 주어진다.

 

 

정답 코드


행렬의 곱셈에 대해 알고 있어야 한다. 나는 몰라서 찾아봤다. 

 

나의 코드

function solution(arr1, arr2) {
  let arr = new Array(arr1.length).fill(0);
  let answer = arr.map((el) => (el = new Array(arr1[0].length).fill(0)));

  for (let i = 0; i < arr1.length; i++) {
    for (let j = 0; j < arr1[i].length; j++) {
      for (let k = 0; k < arr1[i].length; k++) {
        answer[i][j] += arr1[i][k] * arr2[k][j];
      }
    }
  }

  return answer;
}

정답 코드가 아니다. 테케만 통과한다ㅠ

 

정답 코드

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

  for (let i = 0; i < arr1.length; i++) {
    let arr = [];
    for (let j = 0; j < arr2[0].length; j++) {
      let sum = 0;
      for (let k = 0; k < arr2.length; k++) {
        sum += arr1[i][k] * arr2[k][j];
      }
      arr.push(sum);
    }
    answer.push(arr);
  }

  return answer;
}

비슷한데 다르다. 내가 생각했던 접근법이랑 처음부터 다른 것 같다.

처음에 미리 arr1 길이에 맞는 0으로만 채워진 배열을 만들지 않고, 정답 코드와 같이 빈배열에 push하는 방법으로 코드를 짰다면 정답 코드와 같이 접근할 수 있었을 거 같다.

 

그리고, for문의 조건식의 범위도 나와 달랐다. 

생각해보면 그렇다. 간단하게 말하면 arr1의 행과 arr2의 열의 값을 곱하는 것이 행렬의 곱셈이기 때문이다.

 

 


질문이나 잘못된 점은 댓글로 남겨주세요 :)💖

반응형

 

728x90
반응형

댓글