[코딩테스트]프로그래머스 - 행렬의 곱셈

diddnjs02·2020년 5월 23일
0

프로그래머스

목록 보기
20/25
post-thumbnail

행렬의 곱셈

문제 설명

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

해결한 나의 코드

function solution(arr1, arr2){
  var answer = []
  var sum = 0
  var temp = []
  for(var i=0; i<arr1.length; i++){
    for(var k=0; k<arr2[0].length; k++){
      for(var j=0; j<arr2.length; j++){
        sum = sum + arr1[i][j] * arr2[j][k]
      }
      temp.push(sum)
      sum = 0
    }
    answer.push(temp)
    temp = []
  }
  return answer
}

나의 알고리즘

  1. arr1의 행과 arr2의 열을 곱하여 더한다.
    1-1. 먼저 arr1의 행을 가장 바깥의 for문으로 한다. arr1의 각 행을 arr2의 모든 열과 곱하여 더한 값을 모아 answer의 행이 되도록 할 것이기 때문이다. 참고로, 이를 계산한 값을 temp에 넣고 temp를 answer에 넣어 줄 예정이다.
    1-2. 그 다음 for문을 arr2의 행으로 한다. arr2의 열을 곱하는 순서가 arr2의 행만큼 진행되기 때문이다.
    1-3. 가장 안쪽의 for문을 arr2의 열로 한다.
  2. 더한 값을 temp 배열에 넣는다.
  3. sum = 0 으로 초기화 시켜준다. arr1의 해당 행이 arr2의 그 다음 열과 곱하여 더한 값이 또 temp에 들어가야 하기 때문이다.
  4. arr1의 해당 행과 arr2의 모든 열을 곱하여 더한 값이 모인 temp 배열이 완성되면 이를 answer 배열에 넣는다.
  5. temp = [] 로 초기화 시켜준다. arr1의 그 다음 행에 대한 위 과정을 반복하여 answer에 넣어주어야 하기 때문이다.
  6. answer를 반환한다.

행렬의 곱셈 방식부터 알아야 할 문제다... 위에 나온 문제 설명만 보고는 어떻게 풀어야 하는지, 이게 뭔지 이해도 못했다. - [꼼수학_행렬의 기초연산(덧셈,뺄셈,곱셈)] (https://www.youtube.com/watch?v=JpSe38UHaos) - 나는 이 분의 영상을 참고했다.

또한 (요즘 비교적 간단한 문제만 풀어왔던건지) 코드화 하는 데 생각보다 시간이 오래 걸렸다.
for문을 어떻게 구성해야 하는지 생각을 못해 ㅜㅜ;;

profile
개발 공부하는 심리학도

0개의 댓글