본문 바로가기
Algorithm/Programmers Java

[JAVA] 프로그래머스 LEVEL2 행렬의 곱셈

by 제우제우 2024. 10. 17.

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

코딩테스트 연습 > 연습문제 > 행렬의 곱셈

 

난이도: LEVEL2

알고리즘 유형: 구현 (수학: 행렬의 곱셈)

 

문제 풀이

이번 문제는 행렬의 곱셈을 접하지 않았다면 풀 수 없는 문제였다.

나 또한 예제에 나온 숫자로 행렬의 곱셈을 추정하면서 푸려고 했으나 포기하고 

행렬의 곱셈 공식을 구글링하여 풀었다.

 

arr1 행 길이는 2 arr1 열 길이는 3

arr2 행 길이는 3 arr2 열 길이는 2 

 

arr1 열 길이와 arr2 행 길이가 다르다면 두 행렬은 행렬의 곱셈으로 표현이 불가능하다. 

 

즉 (2 * 3) 행렬 * (3 * 2) 행렬인데 

결과로 나오는 행렬의 곱셈은 2 * 2 이다. 

→ arr1 행 길이 * arr2 열 길이 

 

곱셈 과정

결과 

 

정답 코드 

class Solution {
    public int[][] solution(int[][] arr1, int[][] arr2) {
        int a = arr1.length;
        int b = arr1[0].length;
        int c = arr2.length;
        int d = arr2[0].length;
        // b == c
        int[][] answer = new int [a][d];
        for(int i = 0; i < a; i++){ // -> arr1 행 
            for(int j = 0; j < d; j++){ // -> arr2 열 
                int sum = 0;
                for(int k = 0; k < c; k++){
                    sum += arr1[i][k] * arr2[k][j];    
                }
                answer[i][j] = sum;
            }
        }
        return answer;
    }
}