https://programmers.co.kr/learn/courses/30/lessons/12949
2차원 행렬 arr1과 arr2를 입력받아, arr1에 arr2를 곱한 결과를 반환하는 함수, solution을 완성해주세요.
제한사항
입출력 예
- 행렬의 곱셈 개념이 필요하다.
- AXB 행렬과 BXC 행렬을 곱하면 AXC행렬이 된다. (B가 같을 때만 곱할 수 있다.)
- 행렬A에 행렬B를 곱하면 다음과 같다.
- answer = [([0]*x) for _ in range(y)]로 행렬 사이즈를 정해준다. x는 len(arr2[0]), y는 len(arr1)이다.
- 삼중for문을 사용해 곱하고, 더해준다.
def solution(arr1, arr2): answer = [[0]*len(arr2[0]) for _ in range(len(arr1))] for i in range(len(arr1)): lists = [] for j in range(len(arr2[0])): for k in range(len(arr1[0])): answer[i][j] += arr1[i][k] * arr2[k][j] return answer
행렬 배열에 익숙하지 않아 헷갈렸다. 특히, 삼중for문 사용하면서 여러번 시행착오를 거쳐야 했다.
1) 7번 줄: arr1[i][k] arr2[j][k]값으로 적었음 -> 예제 2번 오류 -> arr1[i][k] arr2[k][j]로 수정
2) 5번 줄: len(arr2) 로 적었음 -> 예제는 통과했으나 테스트케이스 오류 ->len(arr2[0])으로 수정
+len(arr1)과 len(arr2[0]) 값을 변수에 저장하고 사용했으면 더 클린한 코드를 쓸 수 있을것 같다.
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]
zip과 sum을 사용해 컴프리헨션으로 풀어낸 풀이...
이중 삼중 for문 컴프리헨션으로 짧은 줄로 써내는거 연습해야겠다.