행렬의 곱셈

하이솝·2026년 4월 10일

2026.04.10

문제 설명

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

제한 조건

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

입출력 예

문제 풀이

1차 실행 오류


런타임 오류 발생
입출력 예의 arr2가 2x2, 3x3 행렬이라 통과가 됐던 것이지,
arr2의 행과 열을 반대로 설정하였음


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

나의 코드

소요 시간: 27분

시간 복잡도: O(n3n^3)

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

AI 코드

시간 복잡도: O(n3n^3)

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

0개의 댓글