[프로그래머스/Lv2] 행렬의 곱셈
2022. 10. 27. 12:17
문제
2차원 행렬 arr1과 arr2를 입력받아, arr1에 arr2를 곱한 결과를 반환하는 함수를 만들어야 한다.
제한사항
1. 행렬 arr1, arr2의 행과 열의 길이는 2 이상 100 이하이다.
2. 행렬 arr1, arr2의 원소는 -10 이상 20 이하인 자연수이다.
3. 곱할 수 있는 배열만 주어진다.
코드
def solution(arr1, arr2):
arr2_T = list(zip(*arr2))
answer = []
for s_arr1 in arr1:
result_arr = []
for s_arr2 in arr2_T:
sum = 0
for i in range(len(arr2)):
sum += s_arr1[i] * s_arr2[i]
result_arr.append(sum)
answer.append(result_arr)
return answer
설명
학교에서 배운 행렬의 곱을 그대로 코드로 옮기면 된다.
좀 더 간단하게 하기 위해 arr2를 전치해서 사용했다.
arr2_T = list(zip(*arr2))
arr2_T는 arr2의 전치행렬
answer = []
반환될 결과 행렬
for s_arr1 in arr1:
arr1의 원소들을 하나씩 꺼내어 반복
result_arr = []
한 줄 연산이 끝나면 결과를 저장할 배열
for s_arr2 in arr2_T:
arr2_T의 원소들을 하나씩 꺼내어 반복
sum = 0
행렬의 곱을 저장해놓을 변수
for i in range(len(arr2)):
sum += s_arr1[i] * s_arr2[i]
행렬의 곱을 수행하는 코드
전치행렬을 통해 i 하나로 코드가 간단하게 짜짐.
result_arr.append(sum)
반복이 끝나면 result_arr에 sum을 저장
answer.append(result_arr)
가장 바깥쪽 반복문이 끝날때마다 answer에 result_arr를 저장
return answer
반복문이 모두 종료되면 answer를 반환
'코딩테스트 > 연습문제' 카테고리의 다른 글
[프로그래머스/Lv2] 튜플 (0) | 2022.10.28 |
---|---|
[프로그래머스/Lv2] 괄호 회전하기 (1) | 2022.10.28 |
[프로그래머스/Lv2] H-Index (0) | 2022.10.27 |
[프로그래머스/Lv2] [1차] 캐시 (0) | 2022.10.26 |
[프로그래머스/Lv2] 점프와 순간 이동 (0) | 2022.10.21 |