DSData StructuresPython learning path
0 / 12 완료
LESSON 02

해시 테이블

키를 주소로 바꿔 빠르게 찾는 딕셔너리와 집합의 원리

왜 해시 테이블을 쓸까요?

목록에서 매번 처음부터 찾는 비용을 없애고 싶을 때 씁니다. 키로 값을 찾거나, 이미 본 값인지 확인하거나, 빈도를 셀 때 코드와 시간 복잡도를 동시에 줄여 줍니다.

LIFE EXAMPLE

생활 속에서 먼저 이해해 볼까요?

코드를 생각하지 말고, 아래 상황이 어떤 순서로 움직이는지만 따라가 보세요.

현실 예시 1

목욕탕 신발장 열쇠

신발 모양을 기억해 모든 칸을 열어보지 않고, 받은 열쇠 번호로 내 신발장을 바로 엽니다.

자료구조와 연결하면열쇠 번호가 key, 신발이 value인 딕셔너리와 같습니다.
현실 예시 2

휴대폰 연락처

전화번호를 찾을 때 모든 사람을 확인하지 않고 이름을 검색해 번호를 바로 꺼냅니다.

자료구조와 연결하면이름을 key로 저장하면 원하는 정보를 빠르게 조회할 수 있습니다.

실무에서는 이렇게 씁니다

코딩 테스트의 장난감 예제를 넘어, 실제 시스템에서 같은 원리가 어디에 숨어 있는지 연결해 보세요.

01

캐시

URL이나 사용자 ID를 키로 삼아 계산·조회 결과를 즉시 재사용합니다.

02

집계

로그의 상태 코드, 상품 카테고리, 단어별 등장 횟수를 셉니다.

03

중복 방지

처리한 이벤트 ID를 set에 기록해 같은 요청의 재처리를 막습니다.

04

로그인 세션

세션 토큰을 키로 사용자 정보와 만료 시각을 바로 찾습니다.

05

창고 재고

상품 코드를 키로 현재 수량과 보관 위치를 즉시 조회합니다.

어떤 원리로 동작하나요?

해시 함수가 키를 정수로 바꾸고 그 값으로 저장 위치를 결정합니다. 서로 다른 키가 같은 위치를 가리키는 충돌은 내부 규칙으로 해결합니다. 좋은 분산과 충분한 공간이 유지되면 조회·삽입·삭제가 평균 O(1)입니다.

핵심 연산과 비용

연산Python 표현시간
조회mapping[key]평균 O(1)
삽입/수정mapping[key] = value평균 O(1)
포함 확인key in seen평균 O(1)
전체 순회for key in mappingO(n)
STEP BY STEP

등장 횟수 세기

  1. 1
    초기counts = {}
  2. 2
    'a' 처리counts = {'a': 1}
  3. 3
    'b' 처리counts = {'a': 1, 'b': 1}
  4. 4
    'a' 재등장counts = {'a': 2, 'b': 1}

⚠ 자주 하는 실수

  • 리스트처럼 입력 순서만 믿고 자료구조를 선택하면 의도가 흐려집니다. 포함 확인이 핵심이면 set이 낫습니다.
  • 키로 쓰는 객체는 해시 가능해야 합니다. 리스트는 dict의 키나 set의 원소가 될 수 없습니다.
  • 평균 O(1)은 메모리를 더 쓰는 대가로 얻습니다.