[java,python] 프로그래머스 - 행렬의 곱셈
업데이트:
문제
프로그래머스-행렬의 곱셈
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]
댓글남기기