1. 두번째 행렬의 전치행렬을 구해야겠다는 것이 처음 아이디어였다. 시도는 좋았으나 코드 가독성이 떨어지고 그닥 직관적이지 않다.
func solution(_ arr1:[[Int]], _ arr2:[[Int]]) -> [[Int]] {
var newArr = [[Int]]()
for i in 0..<arr2[0].count {
var new = [Int]()
for arr in arr2 {
new.append(arr[i])
}
newArr.append(new)
}
var outer = [[Int]]()
for i in arr1 {
var inner = [Int]()
for j in newArr {
var sum = 0
for (x, y) in zip(i, j) {
sum += x * y
}
inner.append(sum)
}
outer.append(inner)
}
return outer
}
2. 다른 풀이
결과 행렬의 크기에 해당하는 배열을 만들어둔 다음, 행렬 곱셈의 정의를 이용하는 방법. 행렬 곱셈을 제대로 이해하고 있다면 이렇게 풀이하는 것이 훨씬 깔끔하고 직관적이다.
func solution(_ arr1:[[Int]], _ arr2:[[Int]]) -> [[Int]] {
var result = [[Int]](repeating: [Int](repeating: 0, count: arr2[0].count), count: arr1.count)
for i in 0..<arr1.count {
for j in 0..<arr2[0].count {
for k in 0..<arr1[0].count {
result[i][j] += arr1[i][k] * arr2[k][j]
}
}
}
return result
}
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] Lv.2 괄호 회전하기 문제 (0) | 2024.04.13 |
---|---|
[프로그래머스] Lv.2 n^2 배열 자르기 문제 (0) | 2024.04.13 |
[프로그래머스] Lv.2 예상 대진표 문제 (0) | 2024.04.11 |
[프로그래머스] Lv.2 N개의 최소공배수 (0) | 2024.04.11 |
[프로그래머스] Lv.2 귤 고르기 문제 (0) | 2024.04.11 |