문제 설명
2차원 행렬 arr1과 arr2를 입력받아, arr1에 arr2를 곱한 결과를 반환하는 함수, solution을 완성해주세요.
제한 조건
- 행렬 arr1, arr2의 행과 열의 길이는 2 이상 100 이하입니다.
- 행렬 arr1, arr2의 원소는 -10 이상 20 이하인 자연수입니다.
- 곱할 수 있는 배열만 주어집니다.
입출력 예
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]] |
문제풀이
- 1. numpy사용
-
import numpy as np def solution(arr1, arr2): answer = [[]] a1 = np.array(arr1) a2 = np.array(arr2) answer = a1.dot(a2) return answer.tolist()
-
- 2. 3중 for문
-
def solution1(arr1, arr2): answer = [] for i in range(len(arr1)): answer.append([]) for j in range(len(arr2[0])): sum = 0 for k in range(len(arr1[0])): sum += arr1[i][k] * arr2[k][j] answer[i].append(sum) return answer
-
- 3. zip(*)사용
def solution(A, B):
answer = []
c = 0
for i in A:
answer.append([])
for j in zip(*B):
sum = 0
for a,b in zip(i,j):
sum += a*b
answer[c].append(sum)
c = c + 1
return answer
- 4. 축약
-
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]
numpy를 사용하면 매우 간단하게 문제를 풀 수 있었다.
하지만 파이썬 표준 라이브러리에 포함되지 않아 코딩테스트를 위한 풀이에 적합하지 않을 수 있어 다른 방법으로도 풀어 보았다.
zip()에 *을 사용하면 리스트의 원소를 개별적인 입력인자로 만들어주는 역할을 한다. 알아두면 자주 쓰일듯
'코딩테스트 연습 > 프로그래머스' 카테고리의 다른 글
[Python] 프로그래머스 (가장 큰 수) 정렬 (0) | 2021.10.03 |
---|---|
[Python] 프로그래머스 (소수찾기) -itertools (0) | 2021.10.01 |
[Python] 프로그래머스 (N개의 최소공배수) (0) | 2021.09.28 |
[Python] 프로그래머스 (최소직사각형) 위클리 첼린지 8주차 (0) | 2021.09.27 |
[Python] 프로그래머스 (피보나치 수) (0) | 2021.09.27 |
댓글