DecordRay
[프로그래머스] Level2 : 행렬의 곱셈[Python] 본문
문제 : https://school.programmers.co.kr/learn/courses/30/lessons/12949
사실 수포자 + 행렬을 고등학교때 배우지 않았었기 때문에(교과과정때문에..) 행렬이 굉장히 낯설었다.
검색을 통해 행렬의 곱 방법을 알아본 후에 문제를 다시 풀었다.
풀이 :
1. 입출력 예시 2의 경우
arr1
[[2, 3, 2],
[4, 2, 4],
[3, 1, 4]]
arr2
[[5, 4, 3],
[2, 4, 1],
[3, 1, 1]]
return 값
[[22, 22, 11],
[36, 28, 18],
[29, 20, 14]]
return 값의 각 행을 하나씩 계산보면
22 = 2*5 + 3*2 + 2*3 -> arr1배열의 1행의 각 원소 * arr2배열의 1열의 각 원소
22 = 2*4 + 3*4 + 2*1 -> arr1배열의 1행의 각 원소 * arr2배열의 2열의 각 원소
11 = 2*3 + 3*1 + 2*1 -> arr1배열의 1행의 각 원소 * arr2배열의 3열의 각 원소
36 = 4*5 + 2*2 + 4*3 -> arr1배열의 2행의 각 원소 * arr2배열의 1열의 각 원소
28 = 4*4 + 2*4 + 4*1 -> arr1배열의 2행의 각 원소 * arr2배열의 2열의 각 원소
18 = 4*3 + 2*1 + 4*1 -> arr1배열의 2행의 각 원소 * arr2배열의 3열의 각 원소
29 = 3*5 + 1*2 + 4*3 -> arr1배열의 3행의 각 원소 * arr2배열의 1열의 각 원소
20 = 3*4 + 1*4 + 4*1 -> arr1배열의 3행의 각 원소 * arr2배열의 2열의 각 원소
14 = 3*3 + 1*1 + 4*1 -> arr1배열의 3행의 각 원소 * arr2배열의 3열의 각 원소
즉,
파란색 배경 - 첫번째 반복문 i 에 해당
보라색 배경 - 두번째 반복문 j 에 해당
초록색 배경 - 세번째 반복문 k에 해당
이를 통해 행렬의 곱이 어떻게 진행 되는지 확인할 수 있고, 이를 코드로 작성하면 아래와 같다.
코드 :
def solution(arr1, arr2):
answer = []
for i in range(len(arr1)):
temp_arr = []
for j in range(len(arr2[0])):
temp = 0
for k in range(len(arr1[0])):
temp += arr1[i][k] * arr2[k][j]
temp_arr.append(temp)
answer.append(temp_arr)
return answer
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] Level2 : 위장[Python] (0) | 2023.01.09 |
---|---|
[프로그래머스] Level2 : 괄호 회전하기[Python] (0) | 2023.01.09 |
[프로그래머스] Level2 : [1차] 캐시[Python] (0) | 2023.01.06 |
[프로그래머스] Level2 : H-Index[Python] (0) | 2023.01.05 |
[프로그래머스] Level2 : 멀리 뛰기[Python] (0) | 2023.01.05 |