문제) 행렬의 곱셈
코딩테스트 연습 - 행렬의 곱셈
[[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]]
programmers.co.kr
- 내 풀이
- 테스트 코드는 pass
- 정확성 테스트: fail & 런타임에러
def solution(arr1, arr2):
answer = []
for i in range(len(arr1)):
ans=[]
for j in range(len(arr1[0])):
sum=0
for k in range(len(arr2)):
sum+=arr1[i][k]*arr2[k][j]
ans.append(sum)
answer.append(ans)
return answer
- 내 풀이
- 힌트: 결과의 열 길이는 arr1의 행 길이, arr2의 열 길이와 같다!
- 두 번째 for문이 결과의 열 길이를 뜻하므로 arr1[0] → arr2[0] 으로 변경
def solution(arr1, arr2):
answer = []
for i in range(len(arr1)):
ans=[]
for j in range(len(arr2[0])):
sum=0
for k in range(len(arr2)):
sum+=arr1[i][k]*arr2[k][j]
ans.append(sum)
answer.append(ans)
return answer
print(solution([[1, 4], [3, 2], [4, 1]], [[3, 3], [3, 3]]))
print(solution([[2, 3, 2], [4, 2, 4], [3, 1, 4]], [[5, 4, 3], [2, 4, 1], [3, 1, 1]]))
print(solution([[2, 3, 2], [4, 2, 4], [3, 1, 4]], [[5, 4], [2, 4], [3, 1]]))
#결과
[[15, 15], [15, 15], [15, 15]]
[[22, 22, 11], [36, 28, 18], [29, 20, 14]]
[[22, 22], [36, 28], [29, 20]]
- 다른 사람 풀이
- zip(* ) : 행과 열을 바꿔주는 역할
- 첫 번째 행렬의 행 값과 두 번째 행렬의 열 값끼리 곱해서 더하는 방식
def solution(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]
'코딩테스트 > 프로그래머스' 카테고리의 다른 글
| [프로그래머스] [Level 2] [스택/큐] 주식가격 (0) | 2022.04.20 |
|---|---|
| [프로그래머스] [Level 2] 피보나치 수 (0) | 2022.04.20 |
| [프로그래머스] [Level 2] [탐욕법(Greedy)] 구명보트 (0) | 2022.04.17 |
| [프로그래머스] [Level 2] JadenCase 문자열 만들기 (0) | 2022.04.13 |
| [프로그래머스] [Level 2] N개의 최소공배수 (0) | 2022.04.13 |