Programmers - 행렬의 곱셈(Python)

문제 설명

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

✍ 코드

# (1)

def solution(arr1, arr2):
    # (2)
    answer = [ len(arr2[0])*[0] for i in range (len(arr1)) ]

    for i in range (len(answer)):
        for j in range (len(answer[i])):
            for k in range (len(arr1[i])):
                answer[i][j] += arr1[i][k]*arr2[k][j]

    return answer

arr1 = [[2, 3, 2], [4, 2, 4], [3, 1, 4]]
arr2 = [[5, 4, 3], [2, 4, 1], [3, 1, 1]]
print(solution(arr1, arr2)) # 결과 예 : [[22, 22, 11], [36, 28, 18], [29, 20, 14]] 

(1) : 기본적으로 arr1이 만약 m n의 사이즈이고 arr2가 만약 a b의 사이즈라고 가정한다면, 두 행렬의 곱 결과 사이즈는 m * b이다.
(2) : 리턴할 값 answer의 크기를 먼저 지정해줌

📝 결과

😃 느낀점

  • 행렬이라는 말은 들어본 적은 있지만 행렬의 곱의 원리가 어떻게 작용되는지는 몰라서 인터넷을 검색한 후 행렬의 곱을 구하는 방식을 파악했다. 수학적인 문제가 나올 때를 대비해서 코딩 테스트에 자주 나오는 수학은 공부를 해야겠다는 생각이 들었다.

👍 Irish의 모든 코드 보기

-> Irish Github

좋은 웹페이지 즐겨찾기