Rabbits in Forest

Sett·2021년 8월 25일
0

문제

https://leetcode.com/problems/rabbits-in-forest/

문제 접근

  1. 처음엔 자기는 제외하고 몇 마리 있는지 알려주기 때문에
  2. 대답 유형 key, 대답 횟수 value 이런식으로 만들어서 dictionary에 저장한 다음,
  3. key - (value - 1) 이렇게 일반식 만들어서 풀었는 데,
  4. 예외 처리해야할게 너무 많더라.
  5. 예외는 0이 등장하는 경우, key - (value - 1)이 음수가 되는 경우 (1이라고 대답하는 토끼가 2마리 이상인 경우)
  6. 예외처리 일반식을 못 짜서 풀이 참고함.

소스 코드

  1. 처음에 작성한 코드
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
    }
}
  1. 참고한 코드
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)
}

접근이 어려운 게 아니라 바로 위의 코드를 생각하는 것이 너무 어려웠다.

profile
안녕하세요

0개의 댓글

관련 채용 정보