🔴 문제
🔵 풀이 1 - 논리 부정 연산자(!), contains, filter, reduce
numbers를 0부터 9까지 숫자와 하나하나 비교하지 않고, 한 번에 비교하는 방법이 있을까 싶어 계속 검색했다.
그러다가 요소가 시퀀스에 포함되어 있는지 비교하는 논리 함수인 contains(_:)를 발견했다. (레나참나 블로그, 호야 블로그, 개발자 소들이 블로그)
그런데 문제는, numbers에 포함되지 "않는" 숫자를 필터링해야 한다는 것이다.
Swift 에서 논리 부정을 어떻게 하는지 몰라 검색하고 검색하다가 '!'를 논리식 앞에 붙이면 된다는 것을 알게 되었다. => !논리식
(하늘하늘 블로그)
<풀이>
func solution(_ numbers:[Int]) -> Int {
let allNums = Array(0...9)
return allNums.filter {!numbers.contains($0)}.reduce(0,+)
}
<해석>
- allNums.filter {!numbers.contains($0)} : allNums 리스트에서 numbers에 포함되지 않는(!) 요소만 필터링
- .reduce(0, +) : 위 필터링된 리스트의 요소를 모두 더하기
🔵 풀이 2 - 발상의 전환!
numbers에서 빠진 숫자를 필터링한 후에 합하는 것이 아니라,
0~9까지 모두 더한 45에서 numbers 요소의 합을 빼도 된다.
import Foundation
func solution(_ numbers:[Int]) -> Int {
return 45-numbers.reduce(0, +)
}