728x90
행렬은 원래 눈으로 푸는 문제인데...
이렇게 일렬의 코드로 보니 머리가 너무 아팠다 ㅎㅎ
이 문제는 행렬간의 곱셈을 할 때 행렬이 어떤 특성을 지녔는지 파악하면 풀 수 있다.
물론 for문이 여러번 겹쳐서 특성을 알아도 시간이 좀 걸렸다...
이 문제를 풀면서 생각한 논리적 흐름
- 우선 answer를 arr1과 arr2를 곱하면 만들어지는 행렬의 형태로 만들어준다.
- 행렬의 특성상 앞 행렬의 열 개수와 뒤 행렬의 행 개수가 동일해야 곱셈이 된다.
- 그리고 곱셈이 끝나면 앞 행렬의 행 개수와 뒤 행렬의 열 개수를 곱한 형태로 바뀐다.
- (ex. 2x3 행렬과 3x2 행렬을 곱하면 2x2 행렬이 된다.)
- 이렇게 미리 만들어둔 행렬에 곱셈이 끝난 값들을 순서대로 넣어주면 된다.
- arr[0][0] = arr1[0][0]*arr2[0][0] + arr1[0][1]*arr2[1][0] ...
- 이런 식으로 arr 행렬의 각 위치에 맞게 for문을 설정해주면 끝.
* 코드
import Foundation
func solution(_ arr1:[[Int]], _ arr2:[[Int]]) -> [[Int]] {
var answer = Array(repeating: [Int](), count: arr1.count)
for i in 0...arr1.count-1 {
for j in 0...arr2[0].count-1 {
var value = 0
for k in 0...arr2.count-1 {
value += arr1[i][k] * arr2[k][j]
}
answer[i].append(value)
}
}
return answer
}
정리(Today I Learned)
- 행렬 문제는 항상 헷갈린다. 두 가지 index가 겹치기 때문에 index 관리를 깔끔하게 하지 못하면 금방 코드가 복잡해지는 것 같다.
'TIL > 알고리즘 공부' 카테고리의 다른 글
프로그래머스 Lv. 2 Swift 알고리즘 - 위장 (0) | 2023.01.06 |
---|---|
프로그래머스 Lv. 2 Swift 알고리즘 - 괄호 회전하기 (0) | 2023.01.05 |
프로그래머스 Lv. 2 Swift 알고리즘 - [1차] 캐시 (0) | 2023.01.04 |
프로그래머스 Lv. 2 Swift 알고리즘 - H-Index (0) | 2023.01.04 |
프로그래머스 Lv. 2 Swift 알고리즘 - 멀리 뛰기 (0) | 2023.01.03 |