프로그래머스 레벨1) 행렬의 덧셈

2021. 12. 1. 12:10Algorithm/알고리즘

728x90
반응형

문제 

고민의흔적(제출x)

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

    var arrLeft = arr1[0][0] + arr2[0][0]//1+3=4
    var arrRight = arr1[0][1] + arr2[0][1]//2+4=6
    var arrLeft2 = arr1[1][0] + arr2[1][0]//2+5=7
    var arrRight2 = arr1[1][1] + arr2[1][1]//3+6=9

    var newArr = [[Int]]()
    newArr[0][0] = arrLeft
    newArr[0][1] = arrRight
    newArr[1][0] = arrLeft2
    newArr[1][1] = arrRight2

    return newArr
}

solution([[2,3]], [[3,4]])

30분 고민하고 해설을 찾아봄. for in 문을 돌려야하나... 라고 생각함

음 역시 맞았음

😺찾아본 답안

func solution(_ arr1:[[Int]], _ arr2:[[Int]]) -> [[Int]] {
    var array1 = [Int]()
    var array2 = [[Int]]()
    for i in 0..<arr1.count{//i는 0,1
        for j in 0..<arr1[i].count{//j는 0
            let sum = arr1[i][j] + arr2[i][j]// arr1[0][0] + arr2[0][0], arr1[1][0] + arr2[1][0]
            array1.append(sum)//[6]
            //print(array1)
        }
        array2.append(array1)//[[4],[6]]
        array1.removeAll()// 왜 이 라인을 실행해줘야 답이되는지???에 대한 답이 해결됬징 for in문 많이써보고 이해해야됌
    }
    return array2
}

물론 for in 문이 필수는 아님

깔끔한 답안

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

공부해볼것

zip에 대해서

 

🐷참고하면 유의미한 답안

func solution(_ arr1:[[Int]], _ arr2:[[Int]]) -> [[Int]] {
    var arr : [[Int]] = Array(repeating : Array(repeating: 0, count : arr1[0].count), count: arr1.count)
    for i in 0..<arr1.count {
        for j in 0..<arr1[0].count {
            arr[i][j] += (arr1[i][j]+arr2[i][j])
        }
    }
    return arr
}

😺답안보다 🐷답안이 어떤부분에서 더 편리해보이는지 이런 부분 고민해보기

-> 파라미터를 내려받아서 바로 쓰는게 코드 가독성도 좋고 코드가 더 짧아진다

 

728x90
반응형