문제.
행렬의 덧셈은 행과 열의 크기가 같은 두 행렬의 같은 행, 같은 열의 값을 서로 더한 결과가 됩니다. 2개의 행렬 arr1과 arr2를 입력받아, 행렬 덧셈의 결과를 반환하는 함수, solution을 완성해주세요.제한 조건
- 행렬 arr1, arr2의 행과 열의 길이는 500을 넘지 않습니다.
풀이.
// 나의풀이
func solution(_ arr1:[[Int]], _ arr2:[[Int]]) -> [[Int]] {
var result1 = [Int]()
var result2 = [[Int]]()
for i in 0...arr1.count - 1 {
for q in 0...arr1[i].count - 1 {
result1.append(arr1[i][q] + arr2[i][q])
}
result2.append(result1)
result1.removeAll()
}
return result2
}
// 인상깊은 풀이
func solution(_ arr1:[[Int]], _ arr2:[[Int]]) -> [[Int]] {
return zip(arr1, arr2).map{zip($0,$1).map{$0+$1}}
}
- 이번 문제를 풀면서 한가지 아쉬운 것이 있다면 아래의 인상깊은 풀이처럼 아... 이거 맵으로 될것같은데... 어떻게 하지 했는데 결국에는 for문을 사용해 풀었는데... ㅠㅠ 포기하지말고 좀 찾아볼걸 그랬다
- 나의 풀이는 정석적으로 풀었지만 아래의 풀이는 zip을 사용했고, map안에 map을 사용했다는 점이 인상깊다
- 스위프트 공식문서에서 zip은
Creates a sequence of pairs built out of two underlying sequences.
두 개의 시퀸스로 구성된 것을 가지고 시퀸스 쌍을 만듭니다 라고 되어있습니다.
import Foundation
let sequence1 = ["1", "2", "3", "4"]
let sequence2 = ["a", "b", "c", "d"]
let sequenceZip = zip(sequence1, sequence2)
for i in sequenceZip {
print(i)
}
for (i, j) in sequenceZip {
print("번호입니다\(i) 알파벳입니다(j)")
}
//
번호입니다1 알파벳입니다(j)
번호입니다2 알파벳입니다(j)
번호입니다3 알파벳입니다(j)
번호입니다4 알파벳입니다(j)
- 이렇게 쌍을 맞추어 주는 형태이고 만약 한쪽의 길이가 맞지 않으면 짧은길이에 맞추어 쌍을 맞추어 출력된다.
'IOS > Swift Algorithm Level 1' 카테고리의 다른 글
Swift. 내적 (0) | 2020.11.06 |
---|---|
Swift. x만큼 간격이 있는 n개의 숫자 (0) | 2020.11.05 |
Swift. 핸드폰 번호 가리기 (0) | 2020.11.03 |
Swift. 하샤드 수 (0) | 2020.11.02 |
Swift. 평균 구하기 (0) | 2020.11.01 |