길이가 같은 두 1차원 정수 배열 a, b가 매개변수로 주어집니다. a와 b의 내적을 return 하도록 solution 함수를 완성해주세요.
이때, a와 b의 내적은a[0]*b[0] + a[1]*b[1] + ... + a[n-1]*b[n-1]
입니다. (n은 a, b의 길이)제한사항
- a, b의 길이는 1 이상 1,000 이하입니다.
- a, b의 모든 수는 -1,000 이상 1,000 이하입니다.
입출력 예
a b result [1,2,3,4]
[-3,-1,0,2]
3 [-1,0,1]
[1,0,-1]
-2
오늘 풀었던 문제를 통해 두 배열의 내적을 구하는 방법에 대해 배우게 되었다. 두 배열 a
와 b
가 주어졌을 때, 같은 인덱스의 요소를 곱하고 그 결과를 모두 더해주는 내적 연산을 구현하는 방법을 익혔다.
func solution(_ a: [Int], _ b: [Int]) -> Int {
var sum = 0
for i in 0..<a.count {
sum += a[i] * b[i]
}
return sum
}
문제를 이해하는게 제일 어려웠지 푸는 방법이 어려운 문제는 아니었다.
배열의 길이가 같다는 것을 이용하여 for
문으로 각 요소에 접근해 곱셈을 한 후, 누적하여 더하는 방식으로 내적을 구할 수 있었다.
zip
과 고차 함수 사용
func solution(_ a: [Int], _ b: [Int]) -> Int {
return zip(a, b).map(*).reduce(0, +)
}
zip()
함수를 사용하여 두 배열의 요소를 묶고, map()
과 reduce()
를 사용해 간결하게 내적을 구할 수도 있다.zip(a, b)
는 배열 a
와 b
의 각 요소를 튜플로 묶어준다. 이후 map(*)
을 사용해 튜플의 요소들을 곱하고, reduce(0, +)
를 사용해 모든 곱의 결과를 더해주는 방식으로도 풀 수 있다는 것을 알게 되었다.zip
, map
, reduce
를 사용한 방법은 코드가 간결해지고 Swift의 함수형 프로그래밍 요소를 활용할 수 있어 효율적이다.zip
을 사용하여 두 배열의 요소를 묶어 작업하는 방식이 간단하면서도 강력하다는 점을 새롭게 배웠고, 이를 통해 Swift에서 함수형 프로그래밍의 유용성을 다시 한 번 느낄 수 있었다.