func solution(_ n:Int, _ lost:[Int], _ reserve:[Int]) -> Int {
let lostArr = lost.filter { !reserve.contains($0) }.sorted(by: <) /// 예전에는 for문돌면서 remove해줬는데 그럴필요없이 filter와 contains로 쉽게 중복값제거
var reserveArr = reserve.filter { !lost.contains($0) }.sorted(by: <)
var safe = 0
for lost in lostArr {
if reserveArr.contains(lost-1) { /// lost+1 값을 먼저 체크했더니 [2, 4] [1, 3] 3번이 2번에게 체육복을 빌려줘서 count가 하나 줄어든다. 그래서 -1 값부터 체크
reserveArr.remove(at: reserveArr.firstIndex(of: lost-1)!)
safe += 1
} else if reserveArr.contains(lost+1) {
reserveArr.remove(at: reserveArr.firstIndex(of: lost+1)!)
safe += 1
}
}
return n - lostArr.count + safe /// 전채 학생수에서 - 도난당한 학생수 + 빌린학생수
/// 예전에 풀었던 방법
// var arr1 = lost
// var arr2 = reserve
// var dic: [Int: Int] = [:]
// var count = 0
// for a in arr1 {
// if arr2.contains(a), let idx1 = arr1.firstIndex(of: a), let idx2 = arr2.firstIndex(of: a) {
// count += 1
// arr1.remove(at: idx1)
// arr2.remove(at: idx2)
// }
// }
// for i in 0..<arr1.count {
// for j in 0..<arr2.count {
// if abs(arr1[i] - arr2[j]) == 1 {
// if dic[arr2[j]] != 1 {
// dic[arr2[j]] = (dic[arr2[j]] ?? 0) + 1
// break
// }
// }
// }
// }
// let result = n + count - lost.count + dic.keys.count
// return result
}