행렬의 곱셈
풀이
문제가 무슨 아무 설명도 없어서 뭐 어떻게 풀라고 하다가, 질문하기에 있는 내용을 보고 행렬의 곱셈이라는 수학 공식이 있음을 알고 풀었다.
lv2로 오고 나서는 내 머리가 지끈 거린다. 단순 머리로만은 못 풀고 이젠, 손도 같이 써서 작업을 해야 할 듯하다.
arr1의 길이 즉 행을 a로 반복하고,
arr2 [0]의 길이 즉 arr2의 열을 반복하면서 더할 값을 넣어두고,
arr2의 길이 즉 arr2의 행을 반복하면서 값들을 곱하고 더해주고 빠져나오면 tmp_row에 넣어준다.
글을 작성하면서도 괜히 헷갈린다.
def solution(arr1, arr2):
answer = []
for a in range(len(arr1)):
tmp_row = [] # 각 행에 대한 결과를 저장할 임시 리스트
for b in range(len(arr2[0])):
tmp = 0
for c in range(len(arr2)):
tmp += arr1[a][c] * arr2[c][b]
tmp_row.append(tmp) # 한 행의 계산 결과를 추가
answer.append(tmp_row) # 전체 결과 리스트에 행 결과를 추가
return answer
다른 사람 풀이
방법 1
# 문제가 개편되었습니다. 이로 인해 함수 구성이나 테스트케이스가 변경되어, 과거의 코드는 동작하지 않을 수 있습니다.
# 새로운 함수 구성을 적용하려면 [코드 초기화] 버튼을 누르세요. 단, [코드 초기화] 버튼을 누르면 작성 중인 코드는 사라집니다.
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]
# 아래는 테스트로 출력해 보기 위한 코드입니다.
a = [ [ 1, 2 ], [ 2, 3 ]];
b = [[ 3, 4], [5, 6]];
print("결과 : {}".format(productMatrix(a,b)));
방법 2
import numpy as np
def productMatrix(A, B):
return (np.matrix(A)*np.matrix(B)).tolist()
방법 3
def productMatrix(A, B):
answer = []
for i in range(len(A)):
arr = []
for j in range(len(B[0])):
tmp = 0
for k in range(len(A[0])):
tmp += A[i][k] * B[k][j]
arr.append(tmp)
answer.append(arr)
return answer
여러 방법이 있는데, 아직은 방법 3이 제일 읽기가 쉽다.
'알고리즘 > 프로그래머스' 카테고리의 다른 글
프로그래머스 Lv2 모음사전 (python) (0) | 2024.02.23 |
---|---|
PCCE 치고나서 느낀 점(멸...망....흑흑) (1) | 2024.02.18 |
프로그래머스 Lv2 하노이의 탑 (python) (0) | 2024.02.17 |
python으로 로또 번호 뽑기 (0) | 2024.02.17 |
프로그래머스 Lv2 전력망을 둘로 나누기 (python) (0) | 2024.02.16 |