문제 설명:
2차원 행렬 arr1과 arr2를 입력받아, arr1에 arr2를 곱한 결과를 반환하는 함수, solution을 완성해 주세요.
문제 예시:
| arr1 | arr2 | result |
| [[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]] |
문제 해결:
import numpy as np
def solution(arr1, arr2):
answer = [[]]
np1 = np.array(arr1)
np2 = np.array(arr2)
result = np1@np2
return result.tolist()
numpy를 사용하면 한 번에 풀린다. 하지만 제한 조건이 많이 여유롭였기에 사용 가능했다. 다른 코드를 봐보자
def solution (arr1, arr2):
return [[sum(a*b for a, b in zip(A_row,B_col)) for B_col in zip(*B)] for A_row in A]
행렬 곱은 기본적으로 a1*b1 + a2*b1 = a11으로 간다.
이때 가장 바깥부터 보면 A를 A_row로 돌면서 풀고 있다
이후, zip(*B)를 보면 B를 한 번 unpack 한다 그러면
arr2 = [[1, 2, 3], [4, 5, 6]] 이 *B = (1,4), (2,5), (3,6)으로 unpack 된다.
따라서 B_col에서는 (1,4) 이런 식으로 들어가게 된다.
이후 계산은 zip(A_row, B_col)로 한번 zip 하여 a, b로 풀고 있으니
곱하여 계산된다.
example2로 예시를 들면
zip(*B)
B_col = (5, 2, 3), (4, 4, 1), (3, 1, 1)
A_row = (2, 3, 2), (4, 2, 4), (3, 1, 4)
가 나오고
zip(A_row, B_col)로 a*b를 하면
5*2, 2*3, 3*2로 각각을 곱하고 마지막으로
sum()을 하므로 전체 값을 더한 값 즉, a_11이 나오게 된다.
'코테' 카테고리의 다른 글
| 프로그래머스 - 리코쳇 로봇 [연습문제] (0) | 2026.01.26 |
|---|---|
| 프로그래머스 - 거스름돈 [연습문제] (0) | 2026.01.26 |
| 프로그래머스 - 의상 [해시] (1) | 2026.01.25 |
| 프로그래머스 - 튜플 [2019 카카오 개발자 겨울 인턴십] (1) | 2026.01.21 |
| 프로그래머스 - 기능개발 [스택/큐] (0) | 2026.01.20 |