IOS/Swift Algorithm Level 1

Swift. 행렬의 덧셈( feat. zip )

 문제.

행렬의 덧셈은 행과 열의 크기가 같은 두 행렬의 같은 행, 같은 열의 값을 서로 더한 결과가 됩니다. 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