
값을 바로 찾기 위한 구조
👉 찾는 데 걸리는 시간이 거의 O(1)
👉 해시로 한 번만 순회
if x in arr: # O(n)
s = set(arr)
if x in s: # O(1)
👉 중복 제거 + 빠른 탐색 = set
# 직접 구현
cnt = {}
for x in arr:
if x in cnt:
cnt[x] += 1
else:
cnt[x] = 1
# 파이썬스러운 방식
from collections import Counter
cnt = Counter(arr)
1) 두 수의 합
nums = [2,7,11,15]
target = 9
seen = {}
for i, num in enumerate(nums):
if target - num in seen:
return [seen[target - num], i]
seen[num] = i
👉 현재 값 기준으로 과거를 해시에서 찾는다
2) 중복 원소 찾기
seen = set()
for x in nums:
if x in seen:
return True
seen.add(x)
return False
3) 완주하지 못한 선수
from collections import Counter
p = Counter(participant)
c = Counter(completion)
answer = p - c
print(list(answer.keys())[0])
📌 Counter는 뺄셈 가능
⚠️ 해시는 최악의 경우 O(n) 이지만
👉 코테에서는 평균 O(1) 로 생각하면 됨