본문 바로가기

프로그래머스(Java)/Level 2

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

728x90

코드 힌트

  1. 행렬의 크기 설정하기
    • 결과 행렬의 크기를 설정할 때, 행렬 곱셈의 규칙에 따라 결과 행렬의 행 수는 첫 번째 행렬의 행 수와 동일하고, 열 수는 두 번째 행렬의 열 수와 동일해야 합니다.
    • 이렇게 설정한 결과 행렬에 각 요소를 저장하고 계산할 수 있습니다.
  2. 행렬 곱셈 원리 이해하기
    • 행렬 곱셈에서는 첫 번째 행렬의 행과 두 번째 행렬의 열을 곱하여 새로운 행렬을 생성합니다.
    • 각 결과 행렬의 요소는 첫 번째 행렬의 해당 행과 두 번째 행렬의 해당 열의 곱을 모두 더한 값입니다.
  3. 계산 방법
    • 각 결과 행렬의 요소를 계산하기 위해, 첫 번째 행렬의 해당 행과 두 번째 행렬의 해당 열을 곱한 뒤, 그 결과를 합산합니다.
    • 이를 위해 반복문을 사용하여 각 요소를 계산하고 결과를 저장합니다.
  4. 예시 설명
    • 만약 첫 번째 행렬이 2x3 크기이고 두 번째 행렬이 3x4 크기라면, 결과 행렬은 2x4 크기가 됩니다.
    • 결과 행렬의 각 요소는 첫 번째 행렬의 행과 두 번째 행렬의 열을 곱한 값을 모두 더한 결과입니다. 예를 들어, 결과 행렬의 (0,0) 요소는 첫 번째 행렬의 0행과 두 번째 행렬의 0열을 곱한 값입니다.

 

 


정답은 더보기 클릭

더보기
class Solution {
    public int[][] solution(int[][] arr1, int[][] arr2) {
        // 결과 행렬의 크기는 arr1의 행 개수와 arr2의 열 개수에 맞춥니다.
        // arr1의 행 수와 arr2의 열 수를 기준으로 결과 행렬을 초기화합니다.
        int[][] result = new int[arr1.length][arr2[0].length];

        // 결과 행렬의 각 요소를 계산합니다.
        for (int i = 0; i < result.length; i++) { // 결과 행렬의 각 행을 순회합니다.
            for (int j = 0; j < result[i].length; j++) { // 결과 행렬의 각 열을 순회합니다.
                // i행 j열의 값 계산을 위해 행렬 곱셈 메서드를 호출합니다.
                result[i][j] = getElementValue(arr1, arr2, i, j);
            }
        }

        return result; // 최종적으로 계산된 결과 행렬을 반환합니다.
    }

    // 행렬 곱셈을 수행하는 메서드입니다.
    public static int getElementValue(int[][] arr1, int[][] arr2, int i, int j) {
        int result = 0;
        // arr1의 i행과 arr2의 j열을 곱하여 결과를 계산합니다.
        for (int k = 0; k < arr1[0].length; k++) {
            result += arr1[i][k] * arr2[k][j];
        }

        return result; // 계산된 결과를 반환합니다.
    }
}
728x90