본문 바로가기

programmers-코딩테스트 연습/Level 2.자바

2021-12-23 / 행렬의 곱셈

문제 설명

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

 

 

 

기본 코드

class Solution {
    public int[][] solution(int[][] arr1, int[][] arr2) {
        int[][] answer = {};
        return answer;
    }
}

 

 

정답 코드

class Solution {
    public int[][] solution(int[][] arr1, int[][] arr2) {
        int[][] answer = new int[arr1.length][arr2[0].length];
        
      
        for(int i = 0;i<answer.length;i++){
            for(int j = 0;j<answer[i].length;j++){
                for(int k =0;k<arr1[i].length;k++){
                    answer[i][j] += arr1[i][k] * arr2[k][j];
                }       
            }
        }
        return answer;
    }
}

 

 

 


 

 

 

먼저 문제를 풀기 전 행렬의 곱셈에 대해 알아야 한다.

 

 

행렬 곱셈 - 위키백과, 우리 모두의 백과사전

행렬 곱셈을 위해선 첫째 행렬의 열 갯수와 둘째 행렬의 행 갯수가 동일해야한다. 곱셈의 결과 새롭게 만들어진 행렬은 첫째 행렬의 행 갯수와 둘째 행렬의 열 갯수를 가진다. 행렬 곱셈(matrix mul

ko.wikipedia.org

 

 

간단하게 알아보자면 두개의 행렬을 하나의 행렬로 합치는 것이다. 이때 제약 조건은 첫째 행렬의 열 갯수와 둘째 행렬의 행 갯수가 동일해야한다는 점이다.

 

첫번째 예시로 나온 행렬을 예로 들자면 

 

arr1

인덱스 0 1
0 1 4
1 3 2
2 4 1

 

arr2

인덱스 0 1
0 3 3
1 3 3

 

 

이 두개의 이차원 배열을 합치는 것이 목표이다. 

 

answer

인덱스 0 1
0 15 15
1 15 15
2 15 15

 

 

answer의 배열 방의 크기는 첫번째 배열의 행, 두번째 배열의 열을 가진다.

 

 

answer[0][0] = arr1[0][0]*arr2[0][0] + arr1[0][0]*arr2[1][0] + arr1[0][1]*arr2[0][0] + arr1[0][1]*arr2[1][0]

과 같은 식이 된다.

 

 

i : answer의 행, j : 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