collections 라이브러리

Leejaegun·2025년 3월 16일

코딩테스트 시리즈

목록 보기
8/49

✅ 코딩테스트에서 유용한 collections 라이브러리 정리 🚀

collections 모듈에는 효율적인 자료구조들이 많아서 코딩테스트에서 자주 쓰여!
아래 기능들을 잘 익혀두면 문제 풀이 속도를 크게 줄일 수 있습니다.

🔹 1. Counter (원소 개수 세기)

문자열 또는 리스트에서 빈도수를 쉽게 계산

✅ 사용법:

코드 복사
from collections import Counter

s = "banana"
count = Counter(s)  # 각 문자 개수 세기
print(count)  # Counter({'a': 3, 'n': 2, 'b': 1})

특정 문자 개수 가져오기

print(count['a']) # 3
print(count['z']) # 0 (없는 키는 0 반환)

가장 많이 등장한 문자 찾기

print(count.most_common(2)) # [('a', 3), ('n', 2)]
📌 활용:

문자 빈도수 계산 (예: 한 번만 등장하는 문자 찾기)
가장 많이 등장한 요소 찾기 (most_common())
리스트 숫자 빈도수 체크

🔹 2. deque (빠른 큐 & 덱)

양쪽에서 빠르게 삽입/삭제가 가능한 큐

✅ 사용법:

코드 복사
from collections import deque

q = deque([1, 2, 3])
q.append(4)  # 오른쪽 삽입
q.appendleft(0)  # 왼쪽 삽입
print(q)  # deque([0, 1, 2, 3, 4])

q.pop()  # 오른쪽 삭제
q.popleft()  # 왼쪽 삭제
print(q)  # deque([1, 2, 3])

📌 활용:

BFS (너비 우선 탐색)에서 빠른 큐 구현
슬라이딩 윈도우 최적화 (고정 크기 유지)
앞뒤에서 삽입/삭제가 많은 경우 리스트보다 빠름

🔹 3. defaultdict (기본값이 있는 딕셔너리)

존재하지 않는 키에 대한 기본값을 자동으로 생성하는 딕셔너리

✅ 사용법:

코드 복사
from collections import defaultdict

기본값 0을 가지는 딕셔너리

d = defaultdict(int)
d['a'] += 1
print(d) # defaultdict(<class 'int'>, {'a': 1})

리스트 기본값 (값이 없을 때 자동으로 빈 리스트 반환)

d = defaultdict(list)
d['a'].append(10)
print(d) # defaultdict(<class 'list'>, {'a': [10]})
📌 활용:

키가 없는 경우 기본값을 자동 설정
해시맵을 사용할 때 유용 (예: 그래프 인접 리스트 생성)
리스트, 정수, 집합 등의 기본값을 쉽게 관리 가능

🔹 4. OrderedDict (순서가 있는 딕셔너리)

딕셔너리에 삽입한 순서를 유지

✅ 사용법:

from collections import OrderedDict

od = OrderedDict()
od['a'] = 1
od['b'] = 2
od['c'] = 3
print(od)  # OrderedDict([('a', 1), ('b', 2), ('c', 3)])

순서 유지 확인

print(list(od.keys())) # ['a', 'b', 'c']
print(list(od.values())) # [1, 2, 3]
📌 활용:

파이썬 3.7 이상에서는 일반 dict도 순서를 유지하지만, OrderedDict는 명확히 순서가 필요한 경우 유용
삽입 순서를 유지하는 캐시 구현 가능

🔹 5. namedtuple (간단한 구조체)

딕셔너리보다 메모리 효율적이고, 속성처럼 접근 가능한 튜플

✅ 사용법:

from collections import namedtuple

사람 정보를 저장하는 구조체

Person = namedtuple('Person', ['name', 'age'])
p = Person(name="Alice", age=25)

print(p.name) # Alice
print(p.age) # 25

📌 활용:

객체처럼 사용할 수 있는 가벼운 구조체
튜플보다 가독성이 좋고, dict보다 메모리 절약 가능
간단한 데이터 저장용 클래스 대신 사용 가능

profile
Lee_AA

0개의 댓글