그동안 바빠서 오랜만에 포스팅을 쓴다.
주어진 array에서 빠진 숫자를 찾는 문제였다.
내가 풀었던 방법은 array를 정렬하고 for문으로 돌면서 빠진 숫자를 찾는 방법이다.
결국은 for문을 두번 도는데... 좀 더 짧게 할 수 있을거 같았다.
func missingNumber(_ nums: [Int]) -> Int {
let sortedNums = nums.sorted()
for index in 0..<sortedNums.count {
if index != sortedNums[index] {
return index
}
}
return sortedNums.count
}
그래서 아래와 같은 방법을 생각했다.
expected
는 1부터 array의 길이까지의 합이다.
(1부터 10까지의 합을 구할때 (10 * 11)/2식을 세우는것과 같음)
actual
은 reduce로 주어진 array 요소의 합이다.
expected
에서 actual
의 차이가 빠진 숫자이다.
func missingNumber2(_ nums: [Int]) -> Int {
let expected = nums.count * (nums.count + 1) / 2
let actual = nums.reduce(0, +)
return expected - actual
}