기록하는삶
[코딩 테스트 연습(파이썬/Python)] 프로그래머스 _ 행렬의 곱셈 본문
728x90
반응형
https://programmers.co.kr/learn/courses/30/lessons/12949
[문제 설명]
2차원 행렬 arr1과 arr2를 입력받아, arr1에 arr2를 곱한 결과를 반환하는 함수, solution을 완성해주세요.
[제한 조건]
- 행렬 arr1, arr2의 행과 열의 길이는 2 이상 100 이하입니다.
- 행렬 arr1, arr2의 원소는 -10 이상 20 이하인 자연수입니다.
- 곱할 수 있는 배열만 주어집니다.
직접 transpose도 구하고, 정답 행렬을 만들어 놓은 채로 연산을 진행해 조금은 비효율적이 됐다.
def solution(arr1, arr2):
n = len(arr1) ; m = len(arr2[0])
answer = []
for i in range(n):
answer.append(list(map( int , list('0'*m))))
arr2_t = []
for i in range(m):
arr2_t.append([arr2[j][i] for j in range(len(arr2))])
for j in range(m):
for i in range(n):
answer[i][j] += sum([x*y for x,y in zip(arr1[i], arr2_t[j])])
return answer
내장함수 zip을 더 잘 활용하는 코드도 보았다. 예를들어,
# 일종의 transpose를 구하는 방법이다.
list(zip(*[[1,2], [3,4], [5,6]]))
이렇게 zip안에 이중 리스트를 넣되 앞에 *를 붙여주면 가능한 범위까지 열로 이루어진 tuple을 반환해주므로, 해당 문제에서 주어지는 배열을 넣으면 transpose를 구할 수 있게 됨을 이용하는 것이다.
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]
for문 구성시 뒷쪽에 곱해지는 행렬이 먼저 선언되어 고정되어야 함은 동일하다.
728x90
반응형
'프로그래머스 > 프로그래머스_lv2(Python)' 카테고리의 다른 글
[코딩 테스트 연습(파이썬/Python)] 프로그래머스 _ 다리를 지나는 트럭 (0) | 2021.10.02 |
---|---|
[코딩 테스트 연습(파이썬/Python)] 프로그래머스 _ 큰 수 만들기 (0) | 2021.10.01 |
[코딩 테스트 연습(파이썬/Python)] 프로그래머스 _ 카펫 (0) | 2021.09.26 |
[코딩 테스트 연습(파이썬/Python)] 프로그래머스 _ 땅따먹기 (0) | 2021.09.26 |
[코딩 테스트 연습(파이썬/Python)] 프로그래머스 _ 최솟값 만들기 (0) | 2021.09.23 |