본문 바로가기
개발/알고리즘

[프로그래머스] 행렬의 곱셈

by ny0011 2021. 2. 15.
반응형

programmers.co.kr/learn/courses/30/lessons/12949

 

코딩테스트 연습 - 행렬의 곱셈

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

programmers.co.kr

2차원 행렬 arr1과 arr2를 곱한 행렬을 만드는 문제다

 

arr1 = 3 * 2 행렬 arr2 = 2 * 2 행렬 return = 3 * 2 행렬
[[1, 4], [3, 2], [4, 1]] [[3, 3], [3, 3]] [[15, 15], [15, 15], [15, 15]]

arr1의 row(행)와 arr2의 column(열)이 새 행렬의 row*col 이 된다 => row1 * col 2 행렬

그리고 내부 for문을 돌려서 새 행렬의 원소를 얻을 땐

arr1의 col과 arr2의 row를 곱한 것을 더하면 된다

=> sum(arr1의 col * arr2의 row) , col1과 row2가 같은 값이고 row1과 col2는 외부 for문에서 얻는 변수

 

말로 쓰려니 어려워보이는데 다음과 같이 for문을 돌리면 된다

def solution(arr1, arr2):
    answer = []
    row1 = len(arr1)
    col1 = len(arr1[0])
    col2 = len(arr2[0])
    for i in range(row1):
        arr = []
        for j in range(col2):
            sum = 0
            for k in range(col1):
                sum += arr1[i][k]*arr2[k][j]
            arr.append(sum)
        answer.append(arr)    
    return answer

'개발 > 알고리즘' 카테고리의 다른 글

[codility] BinaryGap  (0) 2021.02.16
[프로그래머스] 이진 변환 반복하기  (0) 2021.02.15
[프로그래머스] 카펫  (0) 2021.02.15
[프로그래머스] 124 나라의 숫자  (0) 2021.02.15
알고리즘 관련 사이트 & 책  (0) 2021.02.01

댓글