(Python, Java) 프로그래머스 - 행렬의 곱셈

[문제 링크]

Python 풀이 1

def solution(arr1, arr2):
    y = len(arr2[0])
    x = len(arr1)
    ans = [[0] * y for _ in range(x)]

    for i in range(x):
        for j in range(y):
            tmp = 0
            for k in range(len(arr1[0])):
                tmp += arr1[i][k] * arr2[k][j]
            ans[i][j] = tmp

    return ans

Python 풀이 2

def solution(arr1, arr2):    
    return [[sum(a * b for a, b in zip(arr1_row, arr2_col)) for arr2_col in zip(*arr2)] for arr1_row in arr1]

zip을 이용해 간결하게 푼 풀이가 있어서 가져와봤다.
*를 이용해 언팩하고 zip으로 열을 추출한게 굉장히 인상적이었다.

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

        return answer;
    }
}

© 2021. By Backtony