본문 바로가기
알고리즘

[프로그래머스] 행렬의 곱셈 - lv2

by minkang 2021. 1. 21.

 

programmers.co.kr/learn/courses/30/lessons/12949

 

코딩테스트 연습 - 행렬의 곱셈

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

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++) { // 두번째의 열 갯수
    			answer[i][j] = solve(i, j, arr1, arr2);
    		}
    	}
    	
    	
        return answer;
    }
	private int solve(int i, int j, int[][] arr1, int[][] arr2) {
		int sum = 0;
		// i는 행 시작 , j는 열 시작
		for(int k=0; k<arr1[0].length; k++) {
				sum = arr1[i][k]*arr2[k][j] + sum;
		}
		return sum;
	}
}

소요시간 : 20분

행렬의 곱셈을 구하는 문제이다.

arr1의 행의 크기와 arr2의 열의 크기로 answer 2차원 배열을 만들고

answer의 각 인덱스의 값을 solve 함수로 구하였다.

solve에서는 arr1의 시작 행위치 i, arr2의 시작 열 위치 j를 받아와서 arr1의 열 갯수만큼 반복하여 sum 값을 구했다.