🙌 출처 - 프로그래머스 🙌
문제 설명
2차원 행렬 arr1과 arr2를 입력받아, arr1에 arr2를 곱한 결과를 반환하는 함수, solution을 완성해주세요.
제한 조건
입출력 예
arr1 | arr2 | return |
---|---|---|
[[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]] |
[[2, 3, 2], [4, 2, 4], [3, 1, 4]] | [[5, 4], [2, 4], [3, 1]] | [[22, 22], [36, 28], [29, 20]] |
처음에 테스트는 통과했지만, 채점 결과에서 다 틀린 결과가 나와 마지막 케이스를 추가해 인덱스 체크 해주었습니다.
아직 행렬의 곱셈을 잘 모른다면 다음의 링크를 이용해보세요! 🔔 행렬의 곱셈 🔔
곱셈 | 0열 | 1열 | 2열 |
---|---|---|---|
0행 | 00 X 00 01 X 10 02 X 20 | 00 X 01 01 X 11 02 X 21 | 00 X 02 01 X 12 02 X 22 |
1행 | 10 X 00 11 X 10 12 X 20 | 10 X 01 11 X 11 12 X 21 | 10 X 02 11 X 12 12 X 22 |
2행 | 20 X 00 21 X 10 22 X 20 | 20 X 01 21 X 11 22 X 21 | 20 X 02 21 X 12 22 X 22 |
총 00 X 00 으로 4자리가 나온다고 가정한다면, 다음과 같이 3가지 특성을 가지고 있습니다.
1. 00 X 00 부분은 행의 증가에 따라 값이 증가 하는것을 볼 수 있습니다.
2. 00 X 00 부분은 행렬의 상관없이 값이 일정하게 변하는 것을 볼 수 있습니다.
3. 마지막으로 00 X 00 부분은 열과 동일하게 값이 따라 오는것을 볼 수 있습니다.
def solution(arr1, arr2):
answer = []
for i in range(len(arr1)):
tmp = []
for j in range(len(arr2[0])):
sum = 0
for k in range(len(arr2)):
sum += arr1[i][k] * arr2[k][j]
tmp.append(sum)
answer.append(tmp)
return answer
def productMatrix(A, B):
return [[sum(a*b for a, b in zip(A_row,B_col)) for B_col in zip(*B)] for A_row in A]
# 아래는 테스트로 출력해 보기 위한 코드입니다.
a = [ [ 1, 2 ], [ 2, 3 ]];
b = [[ 3, 4], [5, 6]];
print("결과 : {}".format(productMatrix(a,b)));
어떻게 한줄로 풀 생각을 하시는건지 되게 신기할 따름이다,,,😵