알고리즘 - 프로그래머스 행렬의 덧셈 (Swift)

2020. 7. 6. 15:55Algorism

반응형

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

  • 행렬 arr1, arr2의 행과 열의 길이는 500을 넘지 않습니다.

문제 자체는 그렇게 어렵지 않은 것 같아요. 

다만 푸는 방식에 따라서 가독성이나 효율이 어마어마하게 차이가 날 것 같아요.

 

저도 아직 공부하는 중이라서 효율성까지는 고려하지 못하고 있지만 연습하면서 풀어나가고 있어요

 

일단 배열 2개가 들어오면 각 배열에서 동일한 인덱스의 위치 값끼리 더해서 동일한 배열구조로 반환해주면 되는데요.

 

ex) arr1 = [1, 2, 3, 4], arr2 = [1, 2, 3, 4] -> [2, 4, 6, 8]

함수를 이용해서 따로 배열 선언 및 자리수 확인 없이 바로 푸는 방법과

아래와 같이 모든 내용을 분해해서 연산이후 다시 재결합하는 방법이 있을 것 같아요.

 

 

아래는 제가 푼 방식이구요

func solution(_ arr1:[[Int]], _ arr2:[[Int]]) -> [[Int]] {
    
    var resultArray = [[Int]]()
    
    let a = arr1.flatMap { $0 }
    let b = arr2.flatMap { $0 }
    
    let sumCount = arr2[0].count
    var sumArray = [Int]()
    
    a.enumerated().forEach { index, num in
        sumArray.append(num + b[index])
        if sumArray.count == sumCount {
            resultArray.append(sumArray)
            sumArray.removeAll()
        }
    }
    
    return resultArray
}

 

요기는 다른 분이 푼 과정을 참고해주세요.

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

 

 

어떤게 정답이다라고 말하기는 어려울 것 같아요. 

단 다른 사람이 봤을때 파악하기 쉽고, 성능이 좋고, 확장성이 좋은게 더 나은 방법이 아닐까 생각합니다.

그래서 저는 아래 한줄로 요약된 방법이 더 좋지 않을까 생각해요.

반응형