문제
문제 이해
- 2차원 행렬 arr1과 arr2를 입력받아 행렬곱을 수행하여 반환
- 곱할 수 있는 배열만 주어짐
풀이
arr1의 한 행과 arr2의 한 행을 행렬곱 연산하여 tmp에 append 및 하나의 행이 완성되면 arr3에 append
행렬곱 풀이는 글로 설명해서는 이해가 잘 안될 것 같다... (행렬곱에 대해 잘 모른다면 아래 링크 참고)
- 삼중 반복문을 활용 - (1) arr1의 행 수만큼 반복, (2) arr2의 열 수만큼 반복, (3) arr1의 열 수만큼 반복
- 행렬곱이 된 수들을 저장할 배열 tmp, 행렬곱 연산 값을 저장할 정수 val 선언
- arr1은 해당 행에서 오른쪽 방향으로, arr2는 해당 열에서 아래 방향으로 연산이 되도록 인덱스 지정 및 연산
- arr3의 하나의 행이 완성되면 arr3에 append
- arr1의 행 수만큼 반복하면 arr3 완성
코드
첫 번째 코드는 위의 풀이대로 작성한 것이다. 행렬곱 연산을 차례대로 진행하여 최종 arr3이 완성된다. 그리고 혹시나 해서 numpy 라이브러리로도 가능한지 해봤는데, 사용이 가능했다. 그래서 두 번째 코드는 numpy를 활용하여 numpy 배열로 변환하고 @(행렬곱) 기호를 통해 행렬곱 계산을 해주고 리스트로 변환해 반환한 것이다. 물론 numpy라서 시간도 매우 빠르다! 이래서 numpy를 쓰는 것인가.
def solution(arr1, arr2):
arr3 = []
for row in range(len(arr1)):
tmp = []
for i in range(len(arr2[0])):
val = 0
for col in range(len(arr1[0])):
val += arr1[row][col] * arr2[col][i]
tmp.append(val)
arr3.append(tmp)
return arr3
import numpy as np
def solution(arr1, arr2):
return (np.array(arr1)@np.array(arr2)).tolist()
'알고리즘 연습 > 프로그래머스' 카테고리의 다른 글
[Python - Lv.3] 정수 삼각형 (2) | 2024.04.03 |
---|---|
[Python - Lv.3] 이중우선순위큐 (0) | 2024.04.02 |
[Python - Lv.2] 전화번호 목록 (0) | 2024.03.21 |
[Python - Lv.2] 프로세스 (0) | 2024.03.20 |
[Python - Lv.2] 의상 (0) | 2024.03.19 |