Table of Contents

코딩테스트

[파이썬] 해시맵 HashMap

꼬꼬마코더 2024. 5. 26. 18:10
728x90

해시맵의 주요 개념과 특징

해시맵(HashMap)은 데이터를 키-값 쌍(Key-Value Pair)으로 저장하고 빠르게 검색할 수 있도록 도와주는 자료 구조입니다. 해시맵은 해시 함수를 사용하여 데이터를 저장하고 검색합니다.

다음은 해시맵의 주요 개념과 특징입니다:

  1. 키-값 쌍: 해시맵은 데이터를 키와 값의 쌍으로 저장합니다. 예를 들어, 이름을 키로 하고 전화번호를 값으로 저장할 수 있습니다.
  2. 해시 함수: 키를 해시 함수에 입력하여 해시 값을 생성합니다. 이 해시 값은 해시맵에서 해당 키-값 쌍이 저장될 위치를 결정합니다.
  3. 빠른 검색: 해시맵은 키를 통해 값을 빠르게 검색할 수 있습니다. 이는 해시 함수 덕분에 거의 일정한 시간 안에 검색이 가능하기 때문입니다.
  4. 충돌 처리: 두 개 이상의 키가 동일한 해시 값을 가질 때, 이를 "충돌"이라고 합니다. 해시맵은 이러한 충돌을 처리하기 위해 여러 가지 방법(체이닝, 오픈 어드레싱 등)을 사용합니다.

예를 들어, 간단한 해시맵을 다음과 같이 사용할 수 있습니다:

# 파이썬의 딕셔너리(dict)는 해시맵의 일종입니다.
hash_map = {}

# 데이터 삽입
hash_map["name"] = "Alice"
hash_map["age"] = 25

# 데이터 검색
print(hash_map["name"])  # 출력: Alice
print(hash_map["age"])   # 출력: 25

# 데이터 삭제
del hash_map["age"]

위의 예제에서 "name"과 "age"는 키이고, "Alice"와 25는 각각의 값입니다. 해시맵을 사용하면 특정 키에 대한 값을 매우 빠르게 검색할 수 있습니다.

해시맵은 주로 다음과 같은 상황에서 유용합니다:

  • 빠른 데이터 검색: 특정 키로 값을 빠르게 찾을 수 있습니다.
  • 중복 키 방지: 동일한 키가 여러 번 저장되지 않도록 합니다.
  • 동적 데이터 관리: 새로운 키-값 쌍을 쉽게 추가하거나 기존 쌍을 삭제할 수 있습니다.

해시맵은 파이썬의 딕셔너리(dict), 자바의 해시맵(HashMap) 등 다양한 프로그래밍 언어에서 기본 자료구조로 제공되며, 효율적인 데이터 관리에 널리 사용됩니다.


해시맵에 여러 값을 저장하는 방법

해시맵(HashMap)은 기본적으로 각 키에 대해 하나의 값만을 저장할 수 있습니다. 즉, 동일한 키에 대해 여러 값을 저장할 수는 없습니다. 새로운 값을 동일한 키로 저장하면 이전 값은 덮어쓰여집니다.

그러나, 하나의 키에 여러 값을 저장해야 하는 경우도 있습니다. 이를 해결하는 방법 중 하나는 해시맵의 값으로 리스트(List) 또는 집합(Set)과 같은 컬렉션을 사용하는 것입니다. 이렇게 하면 각 키에 대해 여러 값을 저장할 수 있습니다.

예제: 해시맵에 리스트를 값으로 사용

다음은 키에 여러 값을 저장하는 방법을 보여주는 예제입니다:

from collections import defaultdict

# defaultdict를 사용하면 기본값을 리스트로 설정할 수 있습니다.
hash_map = defaultdict(list)

# 데이터 삽입
hash_map["fruits"].append("apple")
hash_map["fruits"].append("banana")
hash_map["vegetables"].append("carrot")

# 데이터 출력
print(hash_map["fruits"])      # 출력: ['apple', 'banana']
print(hash_map["vegetables"])  # 출력: ['carrot']

# 새로운 값을 추가
hash_map["fruits"].append("orange")
print(hash_map["fruits"])      # 출력: ['apple', 'banana', 'orange']이 예제에서는 defaultdict를 사용하여 값으로 리스트를 사용하는 해시맵을 만듭니다. 이렇게 하면 키가 존재하지 않을 경우 자동으로 빈 리스트를 생성할 수 있습니다.

예제: 해시맵에 집합을 값으로 사용

집합을 사용하여 중복된 값을 저장하지 않도록 할 수도 있습니다:

from collections import defaultdict

# defaultdict를 사용하면 기본값을 집합으로 설정할 수 있습니다.
hash_map = defaultdict(set)

# 데이터 삽입
hash_map["fruits"].add("apple")
hash_map["fruits"].add("banana")
hash_map["vegetables"].add("carrot")

# 중복 값 추가 시도
hash_map["fruits"].add("apple")

# 데이터 출력
print(hash_map["fruits"])      # 출력: {'apple', 'banana'}
print(hash_map["vegetables"])  # 출력: {'carrot'}이 예제에서는 defaultdict를 사용하여 값으로 집합을 사용하는 해시맵을 만듭니다. 집합은 중복된 값을 허용하지 않으므로, "apple"을 두 번 추가해도 한 번만 저장됩니다.

이와 같이 해시맵의 값을 리스트나 집합 등으로 설정하면 하나의 키에 여러 값을 저장할 수 있습니다. 이를 통해 데이터의 유연한 관리를 할 수 있습니다.