본문 바로가기

프로그래머스 코딩테스트_도서실습

[코딩테스트_도서실습] 문자열 - 행렬의 곱셉 - Lv2

문제 설명

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

제한사항

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

입출력 예

나의 풀이

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

다른사람 풀이 - 1

class Solution {
    public int[][] solution(int[][] arr1, int[][] arr2) {
        // m*n n*k 행렬의 곱셈 결과는 m*k 행렬이다. 
        // 결과의 배열 생성
        int[][] answer = new int[arr1.length][arr2[0].length];

        for(int i = 0; i < answer.length; i++){ 
            for(int j = 0; j < answer[i].length; j++){
                for(int k = 0; k < arr1[0].length; k++){
                    answer[i][j] += arr1[i][k]*arr2[k][j];
                }
            }
        }
        
        return answer;
    }
}

출처 : https://gom20.tistory.com/22

출처 : https://tosuccess.tistory.com/216