티스토리 뷰

728x90
반응형

https://programmers.co.kr/learn/courses/30/lessons/12950

 

코딩테스트 연습 - 행렬의 덧셈

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

programmers.co.kr

 


 

<나의 풀이>

func solution(_ arr1:[[Int]], _ arr2:[[Int]]) -> [[Int]] {
    var result = [[Int]]()
    
    for row in 0..<arr1.count {
        var addedArr = [Int]()
        for col in 0..<arr1[row].count {
            addedArr.append(arr1[row][col] + arr2[row][col])
        }
        result.append(addedArr)
    }
                  
    return result
}

 


 

<다른 사람의 풀이>

 

import Foundation

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

// -------------------------
// for문으로 위에 코드 이해해보기!
// -------------------------

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

// 0. 첫번째 나오는 map 역할을 하는 변수
var map1 = [[Int]]()

// 1. zip(arr1, arr2)
for (a1, a2) in zip(arr1, arr2) {
    var map2 = [Int]()
    
    // 2. zip($0,$1)
    for (b1, b2) in zip(a1, a2) {
        
        // 3. map{$0+$1}
        map2.append(b1+b2)
    }
    
    map1.append(map2)
}

print(map1) // 결과 :  [[4, 6], [7, 9]]

- zip(_: _:)

 

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

    return arr1.map { (numbers) -> [Int] in
        defer {
            i += 1
            j = 0
        }
        return numbers.map { (number) -> Int in
            defer {
                j += 1
            }
            return number + arr2[i][j]
        }
    }
}

defer

 

 

728x90
반응형
댓글