[java,python] 프로그래머스 - 행렬의 곱셈

최대 1 분 소요

업데이트:

문제

프로그래머스-행렬의 곱셈
2차원 행렬 arr1, arr2를 곱한 결과를 반환하는 문제

  • 제한 사항
    행렬 arr1, arr2의 행과 열의 길이는 2 이상 100 이하
    행렬 arr1, arr2의 원소는 -10 이상 20 이하인 자연수
    곱할 수 있는 배열만 주어진다

  • 예시

arr1 arr2 return
[[1, 4], [3, 2], [4, 1]] [[3, 3], [3, 3]] [[15, 15], [15, 15], [15, 15]]
[[2, 3, 2], [4, 2, 4], [3, 1, 4]] [[5, 4, 3], [2, 4, 1], [3, 1, 1]] [[22, 22, 11], [36, 28, 18], [29, 20, 14]]

풀이

행렬의 곱셈은 앞 행렬의 열의 개수뒤 행렬의 행의 개수가 같아야 한다
행렬의 곱셈은 arr1의 i열과 arr2의 j행 원소의 곱들의 합

파이썬으로 한줄 코드가 가능하다

소스코드(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 n = 0; n < arr2.length; n++) {
					answer[i][j] += arr1[i][n] * arr2[n][j];
				}
			}
		}
		return answer;
	}
}

소스코드(python)

b = [[1,2],[3,4],[5,6]]일때
zip(*b) -> [[1,3,5],[2,4,6]]

def solution(arr1, arr2):
    return [[sum(row*col for row, col in zip(row_arr1, col_arr2)) for col_arr2 in zip(*arr2)] for row_arr1 in arr1]

댓글남기기