mondegreen

[240324] 알고리즘 리부트 37일차 - 프로그래머스 행렬의 곱셈 자바 본문

알고리즘 풀이 및 리뷰/프로그래머스

[240324] 알고리즘 리부트 37일차 - 프로그래머스 행렬의 곱셈 자바

앙갱 2024. 3. 24. 22:08
반응형

언제 배웠는지도 기억이 가물가물한 행렬의 곱셈이 어떤 방식으로 처리되는지 이해가 안되서 찾아보고 푼 문제이다. 구현의 핵심은 아래 주석이 달려있는 부분이다.

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 < arr2.length; k++){ 
                    // 이 반복문이 중요한데 행렬의 곱셈에서 결과 행렬의 크기는 [첫번째 행렬의 행][두번째 행렬의 열] 이다.
                    // 그리고 행렬의 곱셈이 성립하려면 첫번째 행렬의 열과 두번째 행렬의 행이 같아야 하는데 그게 여기서의 k이다.
                    // i와 j만으로 반복문을 돌며 곱셈을 해내기엔 배열 범위를 벗어난다. 
                    // 반복되는 곱의 구간이 k라는 동일한 횟수이므로 이렇게 처리가 가능하다.
                    
                     answer[i][j] += arr1[i][k] * arr2[k][j];    
                    
                }         
            }
        }
    
        return answer;   
    
    }
}
반응형