dict
freq = {}
for ch in s:
freq[ch] = freq.get(ch, 0) + 1
# 또는
from collections import Counter
freq = Counter(s)
키 존재: ch in freq. 값만 순회: freq.values().
set
seen = set()
seen.add(x)
x in seen # 평균 O(1)
unique = list(dict.fromkeys(tokens)) # 순서 유지 중복 제거
컴프리헨션
evens = [x for x in nums if x % 2 == 0]
sq = {x: x * x for x in nums}
letters = {ch for ch in s if ch.isalpha()}
중첩이 깊어지면 가독성이 떨어집니다. 이중 for가 필요하면 일반 루프를 고려하세요.
defaultdict / deque (맛보기)
from collections import defaultdict, deque
g = defaultdict(list)
q = deque([start])
그래프 인접 리스트와 BFS 큐에 자주 씁니다. 스택·큐 원리 레슨과 연결됩니다.
object처럼 쓰지 말 것
문제 풀이에서는 클래스보다 dict/list/tuple이 보통 충분합니다. 상태를 묶을 때만 @dataclass나 튜플을 쓰세요.
컴프리헨션
squares = {x: x * x for x in range(5)}
even = {x for x in xs if x % 2 == 0}
한 줄이 길면 일반 루프로 푸세요. 가독성이 우선입니다.
setdefault / defaultdict
g = {}
g.setdefault(u, []).append(v)
그래프 인접 리스트를 만들 때 자주 씁니다.