본문 바로가기
코테연습

162. 행렬의 곱셈 Javascript

by hxunz 2022. 9. 19.

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

 

프로그래머스

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

programmers.co.kr

 

1. 문제에 대한 이해

  • 우리가 풀어야 할 문제는 무엇인가?
     - 2차원 행렬 arr1과 arr2를 입력받아, arr1에 arr2를 곱한 결과를 반환
  • 주어진 자료는 무엇인가?
     - 2차원 행렬 arr1과 arr2
  • 조건은 무엇인가?
     - 행렬 arr1, arr2의 행과 열의 길이는 2 이상 100 이하

     - 행렬 arr1, arr2의 원소는 -10 이상 20 이하인 자연수

2. 계획

  1. 정답을 담을 배열을 만든다.
  2. 행렬의 곱셈  : arr1의 제 i 행과 arr2의 제 j열을 차례대로 곱해서 더한다.

3. 실행

  • 풀이 계획을 실행하고, 각 단계가 올바른지 점검하라.
const solution = (arr1, arr2) => {
  let newArr = [];

  for (let i = 0; i < arr1.length; i++) {
    newArr.push([]);
    for (let j = 0; j < arr2[0].length; j++) {
      newArr[i].push(0);
    }
  }

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

test('matrixMultiplication', () => {
  expect(solution([[1, 4], [3, 2], [4, 1]], [[3, 3], [3, 3]])).toEqual([[15, 15], [15, 15], [15, 15]]);
  expect(solution([[1, 2, 3], [4, 5, 6]], [[1, 4], [2, 5], [3, 6]])).toEqual([[14, 32], [32, 77]]);
})

 

'코테연습' 카테고리의 다른 글

164. 괄호 회전하기 Javascript  (0) 2022.09.21
163. H-Index Javascript  (0) 2022.09.20
161. 파괴되지 않은 건물 Javascript  (0) 2022.09.19
160. 주차 요금 계산 Javascript  (0) 2022.09.19
159. 캐시 Javascript  (0) 2022.09.19

댓글