하루에 한 문제

[프로그래머스] 행렬의 곱셈 -Java 본문

알고리즘/프로그래머스

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

dkwjdi 2021. 1. 23. 16:48

https://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];
	        int size=arr2.length;
	        
	        for(int i=0; i<arr1.length; i++) {
	        	for(int j=0; j<arr2[0].length; j++) {
	        		answer[i][j]=cal(i,j,size,arr1,arr2);
	        	}
	        }
	        return answer;
	    }

		private int cal(int i, int j, int size, int[][] arr1, int[][] arr2) {
			int sum=0;
			
			for(int k=0; k<size; k++) {
				sum+=arr1[i][k]*arr2[k][j];
			}
			return sum;
		}
	}

소요시간 : 14분

 

이 문제를 풀기 위해서는 우선 행렬의 곱셈을 이해하고 있어야 합니다!!

 

행렬을 곱하기 위해서는 앞쪽 행렬의 열과 뒤쪽 행렬의 행이 같아야 합니다!

 

그리고 곱해서 나온 결과는 앞쪽 행렬의 행 * 뒤쪽 행렬의 열이 나옵니다.

 

결국 3x2  2x2 행렬을 곱하면 3x2의 행렬이 나오는 것입니다.

 

이것을 이용해서 행렬의 크기를 잡아주었고 2중 for문을 돌렸습니다.

 

그리고 행렬의 0,0에 값을 넣을 때는 1번째 행렬의 0행과, 2번째 행렬의 0열을 연산해주면 됩니다.

만약 2,1의 값을 구한다면 1번째 행렬의 2행과 2번째 행렬의 1열과 연산을 해주시면 됩니다!! 끝~

 

 

아 이거는 그냥 순위 999등 돼서 기분 좋아서 올려봤습니다~

Comments