[Algorithm] 프로그래머스 내적
Updated:
문제 설명
나의 풀이
import Foundation
func solution(_ a:[Int], _ b:[Int]) -> Int {
var result = 0
for i in 0..<a.count {
result += a[i] * b[i]
}
return result
}
고민한 점
위의 풀이로 푸니까 2문제 정도가 시간초과 발생했다.
다른 풀이를 찾아보니까 zip
을 사용한 풀이가 있었다.
괜찮은 남의 풀이
import Foundation
func solution(_ a:[Int], _ b:[Int]) -> Int {
return zip(a, b).map(*).reduce(0, +)
}
Swift공식문서를 보면 zip()
은 다음과 같이 사용할 수 있다.
func zip<Sequence1, Sequence2>(_ sequence1: Sequence1, _ sequence2: Sequence2)
-> Zip2Sequence<Sequence1, Sequence2> where Sequence1 : Sequence, Sequence2 : Sequence
이때 sequence1과 sequence2는 시퀀스 혹은 컬렉션 타입이다. 그리고 반환 값으로 튜플쌍들의 시퀀스를 리턴한다.
let words = ["one", "two", "three", "four"]
let numbers = 1...4
let zipResult = zip(words, numbers)
for (word, number) in zipResult {
print("\(word): \(number)")
}
// Prints "one: 1"
// Prints "two: 2
// Prints "three: 3"
// Prints "four: 4"
그리고 만약 두 개의 시퀀스의 길이가 다르다면 짧은 쪽에 맞춰서 끝나게 된다.
let words = ["one", "two", "three", "four"]
let naturalNumbers = 1...Int.max
let zipped = Array(zip(words, naturalNumbers))
// zipped == [("one", 1), ("two", 2), ("three", 3), ("four", 4)]
즉, naturalNumbers는 1부터 정수의 최대값까지이지만, words의 개수가 4개이므로 4개까지만 반환되고 끝난다.
Leave a comment