행렬의 곱셈

HeeSeong·2021년 6월 16일
0

프로그래머스

목록 보기
64/97
post-thumbnail

🔗 문제 링크

https://programmers.co.kr/learn/courses/30/lessons/12949


❔ 문제 설명


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


⚠️ 제한사항


  • 행렬 arr1, arr2의 행과 열의 길이는 2 이상 100 이하입니다.

  • 행렬 arr1, arr2의 원소는 -10 이상 20 이하인 자연수입니다.

  • 곱할 수 있는 배열만 주어집니다.



💡 풀이 (언어 : Java & Python)


두 행렬의 곱의 결과는 [앞의 행렬의 행의 길이 X 뒤의 행렬의 열의 길이]이다. 그래서 반복문을 돌때도 네번 도는 것이 아니라, 세번만 돌면 된다.

Java

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

Python

def solution(arr1, arr2):
    answer = []
    # 첫번째 행렬의 행의 개수만큼 반복
    for i in range(len(arr1)):
        lis = []
        # 두번째 행렬의 열의 개수만큼 반복
        for j in range(len(arr2[0])):
            ssum = 0
            # 각 행렬의 곱할 원소들은 첫번째 행렬의 열의 인덱스 = 두번째 행렬의 행의 인덱스
            for k in range(len(arr1[i])):
                ssum += arr1[i][k] * arr2[k][j]
            lis.append(ssum)
        answer.append(lis)
            
    return answer
profile
끊임없이 성장하고 싶은 개발자

0개의 댓글