Programmers/LV1.

Lv1 | Swift - 행렬의 덧셈

ziziDev 2024. 7. 4. 09:51
반응형

행렬의 덧셈

 

문제설명

행렬의 덧셈은 행과 열의 크기가 같은 두 행렬의 같은 행, 같은 열의 값을 서로 더한 결과가 됩니다. 2개의 행렬 arr1과 arr2를 입력받아, 행렬 덧셈의 결과를 반환하는 함수, solution을 완성해주세요.

제한 조건
  • 행렬 arr1, arr2의 행과 열의 길이는 500을 넘지 않습니다.
입출력 예arr1arr2return
[[1,2],[2,3]] [[3,4],[5,6]] [[4,6],[7,9]]
[[1],[2]] [[3],[4]] [[4],[6]]

 

나의풀이

func solution(_ arr1:[[Int]], _ arr2:[[Int]]) -> [[Int]] {
    return zip(arr1, arr2)
        .map {
            zip($0, $1).map { $0 + $1 }
    }
}

 

zip 고차함수를 사용해서 같은 행 열의 요소 끼리 뭉쳐 줍니다

그리고 map.zip.map을 사용하여

새롭게 더한 리턴값을 새로운 행으로 만드는걸 볼 수 있습니다

 

let arr1 = [[1, 2], [3, 4]]
let arr2 = [[5, 6], [7, 8]]

이렇게 두 배열이 있다면

 

return zip(arr1, arr2)를 통해서

[((1, 5), (2, 6)), ((3, 7), (4, 8))]

으로 변환한 후

zip을 사용하여 같은 위치 요소를 묶어 주는 이유는

zip([1, 2], [5, 6]) -> [(1, 5), (2, 6)] 각 첫번째 배열의 요소를 묶어줍니다

그리고 짝지어진 요소를 map{$0 + $1}을 통해서 결과값을 통해서

map으로 배열을 만들어 줍니다

 

for구문도 생각하긴 했었다

하지만 고차함수를 사용을 익히기 위해서 사용해보았습니다 :)

 

 

다른 사람 풀이

func solution(_ arr1:[[Int]], _ arr2:[[Int]]) -> [[Int]] {
    var arr: [[Int]] = []

    for n in 0..<arr1.count {
        var temp:[Int] = []
        for m in 0..<arr1[n].count {
            temp.append(arr1[n][m] + arr2[n][m])
        }
        arr.append(temp)
    }

    return arr
}

 

배열 크기만큼 반복문을 통해서 새로운 배열로 통하여 같은 위치를 더해줍니다

그리곤 반환된 값을 새로운 배열에 넣어줍니다 

반응형