리스트의 값이 몇 번 반복되는지 세는 라이브러리가 있습니다.

이 라이브러리가 바로 해시 테이블로 구현됩니다.

해시 테이블(Hash Table)은 키(Key)를 값(Value)에 매핑할 수 있는 자료구조입니다. 이를 통해 빠른 데이터 검색, 삽입, 삭제 등의 작업을 수행할 수 있습니다. 해시 테이블의 핵심 개념은 '해시 함수(Hash Function)'와 '충돌 해결(Collision Resolution)'입니다.

해시 함수

충돌 해결

해시 테이블의 성능

사용 예

해시 테이블의 효율성은 해시 함수의 품질과 충돌 해결 전략에 크게 의존합니다. 잘 설계된 해시 테이블은 대규모 데이터 처리에 있어 뛰어난 성능을 발휘할 수 있습니다.

from collections import Counter

# 입력 받기
N = int(input())
cards = list(map(int, input().split()))
M = int(input())
numbers = list(map(int, input().split()))

# 카드의 개수를 세어서 저장
card_count = Counter(cards)

# 각 숫자에 대해 카드 개수 출력
result = [card_count[number] for number in numbers]
print(" ".join(map(str, result)))

파이썬의 collections 모듈에서 제공하는 Counter 클래스는 해시 테이블을 기반으로 구현된 자료구조입니다. **Counter**는 요소들의 개수를 셀 때 유용하며, 주로 딕셔너리 형태로 요소들과 그 요소들의 등장 횟수를 저장합니다. 이 클래스는 내부적으로 dict 클래스를 상속받아 구현되어 있습니다.

Counter 클래스의 주요 특징

  1. 딕셔너리 기반 구현Counter는 내부적으로 파이썬의 기본 딕셔너리(dict)를 확장하여 구현되어 있습니다. 각 요소는 키(key)로 저장되며, 해당 요소의 등장 횟수는 값(value)으로 저장됩니다.
  2. 해시 가능한 요소 처리: **Counter**는 해시 가능한 모든 요소들을 처리할 수 있습니다. 이는 문자, 숫자, 튜플 등 변경 불가능(immutable)한 데이터 타입에 해당합니다.