알고리즘 - 프로그래머스 행렬의 덧셈 (Swift)
2020. 7. 6. 15:55ㆍAlgorism
반응형
행렬의 덧셈은 행과 열의 크기가 같은 두 행렬의 같은 행, 같은 열의 값을 서로 더한 결과가 됩니다. 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}}
}
어떤게 정답이다라고 말하기는 어려울 것 같아요.
단 다른 사람이 봤을때 파악하기 쉽고, 성능이 좋고, 확장성이 좋은게 더 나은 방법이 아닐까 생각합니다.
그래서 저는 아래 한줄로 요약된 방법이 더 좋지 않을까 생각해요.
반응형
'Algorism' 카테고리의 다른 글
알고리즘 - 프로그래머스 2018 카카오 블라인드 다트 게임 [Swift] (0) | 2020.07.08 |
---|---|
알고리즘 - 프로그래머스 2018 KAKAO BLIND RECRUITMENT[1차] 비밀지도 (Swift) (0) | 2020.07.06 |
알고리즘 - 프로그래머스 콜라츠 추측 (Swift) (0) | 2020.07.03 |
알고리즘 - 프로그래머스 2020 카카오 인턴쉽 키패드 누르기 (Swift) (0) | 2020.07.03 |
알고리즘 - 프로그래머스 제일 작은 수 제거하기 (Swift) (0) | 2020.07.03 |