The HackerRank Interview Preparation Kit
Dictionaries and Hashmaps - Count Triplets
문제
코드
풀기, 배운 것
풀지는 못했고 다른 분들이 작성한 코드를 보면서 이해했고 코드를 안보고 내 나름대로 짜보려고 했다.
- for문을 1번만 돌면서 풀려면 dictionary를 이용해서 풀어야 한다
- 2개의 dictionary(자바로는 Map<>)을 사용해야 하는데 이 dictionary가 의미하는 것은 조건이 충족되길 기다리는(그 앞에는 모든 조건이 충족된) 요소들의 수다.
- 작성한 코드에서 ask_middle은 해당 수가 가운데에 오길 기다리는 수고, aks_end는 해당 수가 마지막에 오길 기다리는 수다
- 예를 들어 r 이 2일 때 '1', '2' 가 있었다면
- '1'은 자신에게 r을 곱한 '2'가 가운데에 오길 기다리는 수다. '1'이 하나가 있으니까
ask_middle[2] = 1
가 될 것이다.
- '1', '2'가 있으니까
ask_end[4] = 1
일 것이다.
- 그리고 '2'를 첫번째 수로 생각한다면
ask_middle[4] = 1
이다.
- 이를 이용해서 코드에 작성된 풀이로 풀었다.
- 그런데 dictionary의 값을 찾아서 이 값이 None인지 아닌지 계속 확인을 해줘야 했는데 다른 분의 풀이를 보다가 defaultDictionary라는 것을 알게되었다.
- dictionary 초기화를 해주는데 예를 들어
arr = defaultdict(int)
라고 저장하면 해당 딕셔너리의 초기 값은 int의 초기값인 0으로 저장된다. 그래서 dictionary에 넣지 않은 값을 찾아도 0으로 꺼내진다.
from collections import defaultdict
arr = defaultdict(int)
print(arr[1]) // 0