파이썬 내장 라이브러리인 collections
모듈에 포함된 클래스로, 반복 가능(Iterable
)한 객체들의 요소 개수를 셀 때 사용함.
주로 리스트, 튜플, 문자열 등과 같은 iterable
한 자료구조 요소들의 개수를 쉽게 파악하는 데 사용.
아래는 Counter를 사용한 간략한 예제임.
from collections import Counter
my_list = [1, 2, 3, 1, 2, 3, 4, 5, 1, 2]
counter = Counter(my_list)
print(counter)
출력 값은 아래와 같음.
Counter({1: 3, 2: 3, 3: 2, 4: 1, 5: 1})
딕셔너리가 안에 담겨 나오는 것을 확인 가능함.
즉, 이와 같은 작업을 파이썬 딕셔너리에서도 동일하게 할 수 있음.
다만, Counter
를 사용하는 것이 코드가 딕셔너리를 쓰는 것보다 간결하고 직관적이며 내부적으로 최적화되어 있기에 시간복잡도 같은 성능 면에서도 우수함. (실제로 백준 풀 때 같은 로직으로 한 딕셔너리는 시간초과가 나지만 Counter는 안 나는 경우가 있음)
Counter
의 내부 구현은 C로 작성되어 있어서, 내부적으로는 해시 테이블과 같은 자료구조를 사용하며, 따라서 일반적으로 O(n)
의 시간 복잡도를 갖게 됨.
반면에 딕셔너리를 직접 사용하는 경우에는 같은 작업이 O(n^2)
의 시간 복잡도를 갖게 될 수 있음.
또한 Counter는 다양한 집합 연산 같은 추가적인 기능을 제공함.
정리해보고 나서 알았는데...
앞으로는 Counter를 문제 풀 더 애용해야겠음...^^