[프로그래머스,Level 2] 행렬의 곱셈 (JAVA 구현)
코테/프로그래머스(Programmers)

[프로그래머스,Level 2] 행렬의 곱셈 (JAVA 구현)

반응형

- 첫 풀이 및 정답풀이

  고등학교인가 수학 시간에 배운 행렬의 곱셈에 대한 문제이다. 이에 대한 개념을 모르더라도 간단하게 검색을 통해 알 수 있을 정도로 쉬운 개념이므로 모르는 분들은 한 번 검색 후 풀어보는 것을 추천한다. 

 


  우선 이 문제의 정답을 담을 배열의 크기는 arr1의 행의 길이와 arr2의 열의 길이로 만들어 준다. 다음으로 예제 1번을 예로 들어보면, answer 배열의 0,0에 들어가는 값은 arr1(0,0) * arr2(0,0) + arr1(0,1) * arr2(1,0)이 된다. 여기서 알 수 있는 사실은 동일한 개수의 순서쌍을 arr1과 arr2가 갖는다는 사실이다. 여기서는 2개의 순서쌍이 존재한다. arr1의 0,0과 arr2의 0,0 그리고 arr1의 0,1과 arr2의 1,0.

 

  또한 위의 순서쌍의 규칙을 보면, arr1은 행이 고정된 채로 열이 증가하고, arr2는 열이 고정된 채로 행이 증가한다. 이를 바탕으로 반복문을 세우면 된다. 자세한 내용은 코드를 보며 이해하자.

 

class Solution {
    public int[][] solution(int[][] arr1, int[][] arr2) {
        // 1. answer[arr1의 행의 길이][arr2의 열의 길이] 2차원 배열 생성.
        int[][] answer = new int[arr1.length][arr2[0].length];
        
        // 2. i는 answer의 행을 참조, j는 answer의 열을 참조.
        for(int i = 0;i<answer.length;i++){
            for(int j = 0;j<answer[i].length;j++){
                // 3. k는 arr1과 arr2가 가지고 있는 순서쌍의 개수(arr1의 열의 길이 = arr2의 행의 길이)
                for(int k =0;k<arr1[i].length;k++){
                    // 4. answer[i][j] = arr1은 행이 고정된 채로 열이 증가, arr2는 열이 고정된 채로 행이 증가의 누적값.
                    answer[i][j] += arr1[i][k] * arr2[k][j];
                }       
            }
        }
        
        return answer;
    }
}
반응형