본문 바로가기
Algorithm/Programmers

행렬의 곱셈

by 동그란 혜주 2019. 6. 4.

· 문제 설명

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

 


· Thinking 1

arr1에 arr2를 곱한 결과 =  A[i][1] * B[1][j] + A[i][2] * B[2][j] + ... + A[i][n] * B[n][j] 

 

예제 1의
arr1 = [3][2]
arr2 = [2][2]

return[0][0] = 15
return[0][1] = 15
return[1][0] = 15
return[1][1] = 15
return[2][0] = 15
return[2][1] = 15

return[0][0] = A[0][0]*B[0][0] + A[0][1]*B[1][0] =15
return[0][1] = A[0][0]*B[0][1] + A[0][1]*B[1][1] =15
return[1][0] = A[1][0]*B[1][0] + A[1][1]*B[1][0] =15
return[1][1] = A[1][0]*B[1][1] + A[1][1]*B[1][1] =15

 

예제 2의
arr1 = [3][3]
arr2 = [3][3]

return[0][0] = 22
return[0][1] = 22
return[0][2] = 11
return[1][0] = 36
return[1][1] = 28
return[1][2] = 18
return[2][0] = 29
return[2][1] = 20
return[2][2] = 14

return[0][0] = A[0][0] * B[0][0] + A[0][1] * B[1][0] + A[0][2]*B[2][0]=22
return[0][1] = A[0][0] * B[0][1] + A[0][1] * B[1][1] + A[0][2]*B[2][1]=22
return[0][2] = A[0][0] * B[0][2] + A[0][1] * B[1][2] + A[0][2]*B[2][2]=11


· 완성 코드

class Solution {
    public int[][] solution(int[][] arr1, int[][] arr2) {
    	int[][] answer = new int[arr1.length][arr2[0].length];

    	for (int i = 0; i < arr1.length; i++) {
    		for (int j = 0; j < arr2[0].length; j++) {
    			int len = 0;
    			while(len < arr2.length) {
    				answer[i][j] += arr1[i][len]*arr2[len][j];
    				len++;
    			}
    		}
    	}
		
    	return answer;
	}
}

 


· 문제 출처

 

알고리즘 연습 - 행렬의 곱셈 | 프로그래머스

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

programmers.co.kr

 

'Algorithm > Programmers' 카테고리의 다른 글

멀리 뛰기  (0) 2019.06.04
이중순위우선큐  (1) 2019.06.04
피보나치 수  (0) 2019.06.04
프린터  (0) 2019.06.04
폰켓몬  (0) 2019.06.04

댓글