본문 바로가기
Algorithm/프로그래머스 코딩테스트 문제풀이전략

[프로그래머스] Lv.2 행렬의 곱셈

by 미네구스 2024. 4. 16.

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

 

프로그래머스

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

programmers.co.kr

 

문제풀이 접근

 

행렬의 합은
answer[0][0] = arr1[0][0] * arr2[0][0] + arr1[0][1] * arr2[1][0];

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

 

즉,

R[i][j] = A[i][K] * B[K][j] + A[i][K] * B[K][j]

출처: https://tosuccess.tistory.com/216 [EI_HJ:티스토리]

 

이런식으로 표현이 가능하다.

 

K는 A 열 개수, 혹은 B 행 개수다.

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

 

문제풀이 회고

 

k의 범위를 arr2.length가 아닌 len2로 해서 실패했다.