[프로그래머스] 행렬의 곱셈 [연습문제] [python] level2
문제 설명
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]] |
설계 및 구현
접근 방법
지문의 설명 대로 주어진 행렬의 곱셈을 반환하여 해결 할 수 있는 문제이다.
행렬 A와 B로 곱셈을 한 결과가 res라고 한다고하면
res는 A의 열의갯수와 B의 행의 갯수를 가지게 된다.
my_solution
def solution(arr1, arr2):
answer = []
for i in range(len(arr1)):
row = []
for k in range(len(arr2[0])):
mul_num = 0
for j in range(len(arr1[i])):
mul_num += arr1[i][j]*arr2[j][k]
row.append(mul_num)
answer.append(row)
return answer
1. arr1의 열의 갯수와 B의 행의 갯수까지 반복문을 돌린다.
2. arr1[i][j] * arr2[j][k]를 연산하여 mul_num에 저장한다. => answer의 한개의 요소를 구함
3. arr[i]의 길이 만큼 돌려서 한개의 row를 구성한 후 answer에 추가한다.
4. 모든 반복문을 탈출한뒤 결과값이 담긴 answer을 반환한다.
다른 분의 solution
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]
열로 들어 있는 요소를 찢어서 행별로 다시 만드는 코드라고 한다.
아무리 봐도 난 이해가 어려운 코드...
반응형
'알고리즘 문제풀이 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 예상 대진표 [2017 팁스타운] [python] (0) | 2020.11.07 |
---|---|
[프로그래머스] JadenCase 문자열 만들기 [연습문제] [python] (0) | 2020.11.07 |
[프로그래머스] 내적 [월간 코드 챌린지 시즌1] [python] (0) | 2020.11.07 |
[프로그래머스] 이진 변환 반복하기 [월간 코드 챌린지 시즌1] [python] (0) | 2020.11.07 |
[프로그래머스] 타겟 넘버 [깊이/너비 우선 탐색(DFS/BFS)] [python] (0) | 2020.11.03 |