문제 설명

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

제한 조건

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

입출력 예

arr1arr2return
[[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]]

풀이

  • 행렬의 행과 최댓값은 로 매우 적다.
  • 따라서 단순하게 행렬 곱샘의 원리를 그대로 코드로 옮기면 될것이라고 생각된다.
def solution(arr1, arr2):
    answer = []
    for i in range(len(arr1)):
        calc_list=[]
        for j in range(len(arr2[0])):
            calc=0
            for k in range(len(arr1[0])):
                calc+=arr1[i][k]*arr2[k][j]
            calc_list.append(calc)
        answer.append(calc_list)
    return answer

list comprehension 의 활용

  • 일적인 루프와 조건문은 리스트 컴프리헨션을 활용해서 매우 짧게 작성할 수 있다.
def solution(arr1,arr2):
	return [[sum([arr1[i][k]*arr2[k][j] for k in range(len(arr1[0]))]) for j in range(len(arr2[0]))] for i in range(len(arr1))]