197. 행렬의 덧셈
1
2
3
4
5
6
7
8
9
10
func solution(_ arr1:[[Int]], _ arr2:[[Int]]) -> [[Int]] {
var answer : [[Int]] = []
answer = zip(arr1,arr2).map{zip($0,$1).map{$0+$1}}
return answer
}
zip을 사용해보려고 아래와 같이 이것저것 해보았다.
여기서 예시는 아래와 같다
1
2
var arr1 : [[Int]]= [[1, 2], [2, 3]]
var arr2: [[Int]]= [[3, 4], [5, 6]]
첫번째는 zip을 하였을때 합이 아닌 이어 붙이기와 같은 효과가 되어버렸다
1
2
3
4
5
6
print(zip(arr1,arr2).map{$0+$1})
//[[1, 2, 3, 4], [2, 3, 5, 6]]
print(zip(arr1,arr2).map{($0+$1).reduce(0,+)})
//[10, 16]
그래서 zip으로 먼저 arr1,arr2를 해서 확인해보면 다음과 같이나온다
1
2
3
print(zip(arr1,arr2))
//Zip2Sequence<Array<Array<Int>>, Array<Array<Int>>>(_sequence1: [[1, 2], [2, 3]], _sequence2: [[3, 4], [5, 6]])
Dictionary와 같이 되어버리기에 map으로 $0,$1을 더하면 배열 합치기의 개념으로 되어버린다.
1
2
3
4
5
let myFriends = ["Fuu", "Emma", "Jason"]
let otherFriends = ["Mike", "Luck", "Paul"]
let totalFriends = myFriends + otherFriends
print(totalFriends) // ["Fuu", "Emma", "Jason", "Mike", "Luck", "Paul"]
다만 다른건 arr1+arr2를 하면
1
2
print(arr1+arr2)
// [[1, 2], [2, 3], [3, 4], [5, 6]]
2차원 배열은 유지하되, 큰틀의 껍데기에 [3,4],[5,6] 만 추가가 된다.
그래서 zip.map{zip}을 다시 해주게 되면 아래와 같다.
1
[Swift.Zip2Sequence<Swift.Array<Swift.Int>, Swift.Array<Swift.Int>>(_sequence1: [1, 2], _sequence2: [3, 4]), Swift.Zip2Sequence<Swift.Array<Swift.Int>, Swift.Array<Swift.Int>>(_sequence1: [2, 3], _sequence2: [5, 6])]
첫번째 zip과는 달리 sequence1이 1차배열로 되어있다. 즉 zip->map->zip을 이용하여 1차배열로 전환해주는 것이다. 그리고나서 다시 map을 하게되면 클로저들끼리 이어붙여지므로 원하는 결과값이 나온다.
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.