https://leetcode.com/problems/rabbits-in-forest/
class Solution {
func numRabbits(_ answers: [Int]) -> Int {
var result = 0
var collected: [Int:Int] = [:]
for ans in answers {
collected[ans, default: 0] += 1
}
collected.forEach { k, val in
if k < 1 {
}
else {
result += k - (val - 1)
}
}
result += answers.count
return result
}
}
class Solution {
func numRabbits(_ answers: [Int]) -> Int {
var ans = 0
var collected: [Int:Int] = [:]
for count in answers {
if collected[count] == nil {
collected[count] = 0
ans += count + 1
}
else {
collected[count]! += 1
}
if collected[count] == count {
collected.removeValue(forKey: count)
}
}
return ans
}
}
처음에 작성한 코드는 대답하면 대답하는 대로 다 딕셔너리의 벨류를 추가하고 예외의 가능성을 두지 않았는 데, 대답하면 결과에만 반영하고 값은 0으로 초기화 한다.
if collected[count] == nil {
collected[count] = 0
ans += count + 1
}
else {
collected[count]! += 1
}
이후 등장하면 count up해서 논리의 오류 (1,1,1로 대답했는데 셋다 같은 색상일 순 없으니까)가 발생하면 아래의 구문으로 대답을 초기화 해서 새로운 색상에 접근하는 듯 했다.
if collected[count] == count {
collected.removeValue(forKey: count)
}
접근이 어려운 게 아니라 바로 위의 코드를 생각하는 것이 너무 어려웠다.