본문 바로가기
Study/코딩 테스트

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

by 코드콩 2024. 10. 4.
728x90
반응형

 
https://school.programmers.co.kr/learn/courses/30/lessons/12949?language=java

프로그래머스

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

programmers.co.kr

 
문제 설명
2차원 행렬 arr1과 arr2를 입력받아, arr1에 arr2를 곱한 결과를 반환하는 함수, solution을 완성해주세요.
 
제한 조건

  • 행렬 arr1, arr2의 행과 열의 길이는 2 이상 100 이하입니다.
  • 행렬 arr1, arr2의 원소는 -10 이상 20 이하인 자연수입니다.
  • 곱할 수 있는 배열만 주어집니다.

 
입출력 예

arr1arr2return
[[1, 4], [3, 2], [4, 1]][[3, 3], [3, 3]][[15, 15], [15, 15], [15, 15]]
[[2, 3, 2], [4, 2, 4], [3, 1, 4]][[5, 4, 3], [2, 4, 1], [3, 1, 1]][[22, 22, 11], [36, 28, 18], [29, 20, 14]]

 
 
코드

class Solution {
    public int[][] solution(int[][] arr1, int[][] arr2) {
        // arr1 행과 열의 수
        int r1 = arr1.length;
        int c1 = arr1[0].length;
        
        // arr2 행과 열의 수
        int r2 = arr2.length;
        int c2 = arr2[0].length;
        
        // 저장할 2차원 배열 초기화
        int[][] answer = new int[r1][c2];
        
        // 첫 번재 행렬 arr1의 각 행과 두번째 행렬 arr2의 각 열에 대해
        for(int i=0; i<r1; i++) {
            for(int j=0; j<c2; j++) {
                // 두 행렬의 데이터를 곱해 리스트 더하기
                for(int k=0; k<c1; k++) {
                    answer[i][j] += arr1[i][k] * arr2[k][j];
                }
            }
        }
        
        return answer;
    }
}

 
 
정리
이 문제는 수학의 행렬의 곱셈을 그대로 구현해야 합니다.
1. 인수로 받은 arr1과 arr2의 행과 열 정보를 변수에 가져옵니다.
2. 결과를 담는 행렬의 크기의 배열을 만듭니다. (r1 * c2)
3. 행렬을 곱할 땐 첫번째 행렬의 각 행과 두번째 행렬의 각 열들을 배치해 계산합니다.
4. 첫번째 행렬의 행의 크기인 r1과 두 번째 행렬의 열의 크기인 c2를 사용합니다.
 
 
참고
https://mathbang.net/562#gsc.tab=0

행렬의 곱셈, 행렬의 거듭제곱

행렬의 곱셈은 행렬의 실수배에 비하면 훨씬 어려워요. 행렬을 곱할 수 있는 조건이 있어 이 조건을 만족하지 않으면 곱셈을 하지 못하는 경우도 있어요. 게다가 계산방식도 매우 까다롭죠. 도

mathbang.net

 
 

728x90
반응형