[프로그래머스] 28 : 행렬의 곱셈

서예진·2024년 2월 22일
0

목차💻

▸ 행렬의 곱셈


✅ 행렬의 곱셈 : Lv.2

문제

출처: 프로그래머스 코딩테스트 연습 > 연습문제 > 행렬의 곱셈

내 풀이

  • 행렬의 곱셈을 풀어보면 다음과 같다.

    [[1, 4], [3, 2], [4, 1]] * [[3, 3], [3, 3]]
    [[arr1[0][0]*arr2[0][0] + arr1[0][1]*arr2[1][0], arr1[0][0]*arr2[0,1] + arr1[0][1]*arr2[1][1]], ...]
    => [[15, 15], [15, 15], [15, 15]]

  • 처음에는 2중 for문으로 풀려고 해서 한시간동안 헤맸다.
  • 천천히 생각해보니 행렬의 곱셈을 하고자 하는 두 행렬의 크기가 AxB, BxC 일 때, B에 관한 변수가 있어야했다.
  • 여기서 A = arr1.length, B = arr1[0].length(=arr2.length), C = arr2[0].length 이다.
  • A에 대한 변수를 i, B에 대한 변수를 k, C에 대한 변수를 j라고 할 때, 두 수에 곱에 대한 index는 다음과 같다.
  • arr1[i][k]*arr2[k][j]
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 < arr2.length; k++){
                    answer[i][j] += arr1[i][k]*arr2[k][j];
                }
            }
        }
        return answer;
    }
}
  • B에 대한 접근이 필요하다는 생각이 나중에 들어서 문제를 푸는데 오래 걸렸다.

profile
안녕하세요

0개의 댓글