본문 바로가기
JAVA/프로그래머스

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

by ♡˖GYURI˖♡ 2024. 5. 24.
 

프로그래머스

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

programmers.co.kr

 

 

 

이해하기

다차원 행렬의 곱을 구하는 식이 생각나지 않아 검색해봤다.

위 식을 기반으로 해서 풀이해보려 했다.

  • A 배열은 행별로 복사해온다.
  • B 배열은 열별로 복사해온다.
  • 복사한 두 배열을 곱해서 sum을 구한다
  • answer 배열에 넣어준다!

여기까지 생각하고는 구현에서 막혔다...

그리고 3x2 배열과 2x4 배열을 계산하면 3x4 배열이 나와야한다는 점을 놓쳐서 answer 배열의 길이를 잘못 지정하기도 하였다.

 

 

참고한 블로그⬇️

 

[프로그래머스] 행렬의 곱셈 (Java)

프로그래머스 행렬의 곱셈단순히 행렬의 계산을 하려고 하면 어렵지 않다. 그런데 코드로 옮기려고 하면? 생각보다 쉽게 구현되지 않았다. 그래서 다시 행렬 연산을 공부하고 하나씩 옮겨봤다.

velog.io

 

 

 

문제풀이

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 < arr1[0].length; k++) {
                    answer[i][j] += arr1[i][k] * arr2[k][j];
                }
            }
        }
        
        return answer;
    }
}

 

굳이 나처럼 복사할 필요 없이 i, j, k를 가지고 계산하였다.

k는 arr1에서는 열로, arr2에서는 행으로 사용된다!

 

그치만 다시 풀이하려고 하면 또 헷갈릴 것 같다...ㅜㅅㅜ