public func solution(_ A : inout [Int]) -> Int {
var sum = 0
for number in 1...A.count+1 {
sum += number
}
for number in A {
sum -= number
}
return sum
}
N개의 숫자가 1과 N+1 사이에 있고 한 숫자가 빠져있으면, 이 숫자는 1과 N+1 사이의 모든 숫자를 더한 값으로 부터 배열에 있는 숫자를 뺀 나머지일 것이다.
1부터 N까지 더한 값은 N*(N+1) / 2 이므로, 이 공식을 이용하면 첫째 for-loop을 간소화할 수 있다.
따라서 위 공식을 이용하여 최적화한 풀이는 다음과 같다.
public func solution(_ A : inout [Int]) -> Int {
let n = A.count+1
let sum = n*(n+1) / 2
let sumA = A.reduce(0, +)
return sum - sumA
}