[ Programmers ] 행렬의 곱셈 (Java)

ma.caron_g·2021년 12월 6일
0

Lv.2 - Programmers

목록 보기
3/14
post-thumbnail

1. Problem 📃

[ 행렬의 곱셈 ]

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


[ 문제 설명 ]

2차원 행렬 arr1과 arr2를 입력받아, arr1에 arr2를 곱한 결과를 반환하는 함수, solution을 완성해주세요.


2. Constraint 🔗

[ 제한 사항 ]

  • 행렬 arr1, arr2의 행과 열의 길이는 2 이상 100 이하입니다.
  • 행렬 arr1, arr2의 원소는 -10 이상 20 이하인 자연수입니다.
  • 곱할 수 있는 배열만 주어집니다.

3. Example 📚

[ 입출력 예시 ]

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

4. Solution 🔑

  1. arr1(M x N)크기의 행렬과 arr2(P x Q)크기의 행렬을 곱하면 (M * Q)크기의 행렬이 나온다.
    따라서 answer의 배열 크기는 answer[arr1.length]arr2[0].length] 로 선언해주었다.

  2. 행렬의 곱셈 공식을 통해 보면 전체적으로 arr1의 행의 길이만큼 곱셈이 이루어지는데, 이를 arr2의 열들이랑 곱해 줄 것이다. 근데 또 그 안에서 연산이 이루어져야한다. 근데 요소 값들을 구분 해야하므로 총 삼중 for문을 돌려 해줄 것이다.

  3. 행렬의 곱셈을 이용하여 나온 값들을 answer배열에 넣어주어 최종 answer배열을 반환해준다.

5. Code 💻

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++) {
				for(int k=0; k<arr1[0].length; k++) {
					answer[i][j] += arr1[i][k] * arr2[k][j];
				}
			}
		}

		return answer;
	}
}

6. Growth 🍄

행렬의 곱셈을 하는 방법은 아는데 이걸 표현하려니 조금 힘들었던거 같다.
종이에 계속 그려가면서 필요한 값(인덱스)들을 적어보고 풀어보니

"아 이걸 이렇게 늦게 풀었구나" 하고 아쉬움이 많이 남았다
그래도 실력이겠거니 한다...
profile
다른 사람이 만든 것을 소비하는 활동보다, 내가 생산적인 활동을 하는 시간이 더 많도록 생활화 하자.

0개의 댓글