defaultdict

Created by
  • 서경태
Created at
defaultdict는 collections 모듈에 속해 있다.
from collections import defaultdict
그렇기에 위 코드를 위에 선언해야한다.
defaultdict를 사용하면 기본값을 설정할 수 있어서 키가 존재하지 않는 경우도 key error를 발생시키지 않고 기본값을 반환할 수 있다.
defaultditct에는 int, list, set를 사용할수 있는데 하나하나 어떤 기능을 하는지 확인해보자.
defaultdict(int)
밸류값을 0으로 초기화 한다.
from collections import defaultdict # 기본값이 0인 defaultdict 생성 d = defaultdict(int) # 값 추가 d['apple'] += 1 d['banana'] += 1 d['apple'] += 1 print(d) # 출력: defaultdict(<class 'int'>, {'apple': 2, 'banana': 1})
defaultdict(list)
빈 리스트를 값으로 가지는 딕셔너리를 쉽게 생성할 수 있다.
from collections import defaultdict # 기본값이 빈 리스트인 defaultdict 생성 d = defaultdict(list) # 값 추가 d['fruits'].append('apple') d['fruits'].append('banana') d['vegetables'].append('carrot') print(d) # 출력: defaultdict(<class 'list'>, {'fruits': ['apple', 'banana'], 'vegetables': ['carrot']})
defaultdict(set)
빈 집합을 값으로 가지는 딕셔너리를 쉽게 생성할 수 있다.
from collections import defaultdict # 기본값이 빈 집합인 defaultdict 생성 d = defaultdict(set) # 값 추가 d['fruits'].add('apple') d['fruits'].add('banana') d['fruits'].add('apple') # 집합이므로 중복된 값은 한 번만 저장됨 print(d) # 출력: defaultdict(<class 'set'>, {'fruits': {'banana', 'apple'}})
백준 문제를 풀다 보면 for 반복문을 사용해 빈 리스트나 세트를 만드는 경우가 많다.
이때 defaultdict를 사용하면 코드를 한눈에 보기도 쉽고 시간복잡도에서 이점을 가져갈 수 있다.
반복문
defaultdict
for _ in range(int(input())):
n, m = map(int, input().split())
graph = defaultdict(list)
for _ in range(m):
a, b = map(int, input().split())
graph[a].append(b)
graph[b].append(a)
cnt = dfs(1,[])
print(cnt)