728x90
반응형
https://programmers.co.kr/learn/courses/30/lessons/12949?language=swift#
행렬의 곱셈을 코드로 나타내보는 문제.
기본적으로 행렬의 곱셈에 대해서는 알고 있을 거라 생각하고 진행해본다.
(다 알겠지만 행렬의 곱이 성립하려면 (m x n) * (n x p)처럼 n만 같으면 된다는 건 인지하고 시작하자.)
1. 우변에 곱해줄 행렬의 행과 열을 바꿔준다.
2. 좌변의 행렬 원소와 1번의 결과를 zip하여 곱하고 합을 구한다.
바로 코드로 보자
import Foundation
func solution(_ arr1:[[Int]], _ arr2:[[Int]]) -> [[Int]] {
// 1. 우변의 행렬 행 <-> 열 바꾸기
var arrcol = [[Int]]()
for j in 0..<arr2[0].count {
var temp = [Int]()
for i in 0..<arr2.count {
temp.append(arr2[i][j])
}
arrcol.append(temp)
}
// 2. 좌변 행렬의 원소와 우변 행렬의 원소 zip하여 곱, 셈 계산
var res = [[Int]]()
for l in arr1 {
var sub = [Int]()
for r in arrcol {
sub.append(zip(l,r).map {$0 * $1}.reduce(0,+))
}
res.append(sub)
}
return res
}
행렬을 뒤집을 줄 알고, 원소들끼리 곱해줄 수 있으면 풀 수 있는 문제.
한 꺼번에 해결하기 보다는 차근차근 접근하는 방식으로 풀이하였다.
밤에 문제를 풀다보면 자꾸 index가 헷갈린다.. 행인지.. 열인지..
집중해서 풀자!!
끄읕
728x90
반응형