Home 해시 맵 Hash Map
Post
X

해시 맵 Hash Map

해시 맵 (Hash Map)

해시 맵은 키(Key)와 값(Value)을 쌍으로 저장하는 자료구조로, 키를 해시 함수로 변환하여 평균 O(1) 시간에 데이터를 조회합니다.

JavaScript에서는 일반적으로 Map 객체를 사용합니다.


Map 객체의 주요 메소드

  • set(key, value) : 키-값 쌍 저장
  • get(key) : 키에 해당하는 값 조회
  • has(key) : 키 존재 여부 확인
  • delete(key) : 키 제거
  • keys() : 키를 삽입 순서대로 갖는 iterable 객체 반환
  • values() : 값을 삽입 순서대로 갖는 iterable 객체 반환
  • entries() : [key, value]쌍을 삽입 순서대로 갖는 iterable 객체 반환
  • size : 저장된 요소 개수

기본 사용법

1
const map = new Map();

set / get

1
2
3
4
5
map.set("apple", 1);
map.set("banana", 2);

map.get("apple"); // 1
map.get("orange"); // undefined

has / delete

1
2
3
map.has("banana"); // true
map.delete("banana");
map.has("banana"); // false

size

1
map.size; // 1

반복문

1
2
3
for (let [key, value] of map) {
  console.log(key, value);
}

배열 VS 해시 맵

배열은 순회하고, 해시 맵은 기억한다.

  • 입력 크기가 작거나 순서가 중요하지 않다면 해시 맵이 유리
  • 이중 for문은 대부분 시간초과
  • 값을 찾기 위해 매번 처음부터 끝까지 같은 배열을 반복해서 탐색하는 경우, 해시 맵으로 생각 전환

배열 기반 사고

시간 복잡도 : O(N²)

1
2
3
4
5
6
let count = 0;
for (let i = 0; i < arr.length; i++) {
  for (let j = 0; j < arr.length; j++) {
    if (arr[i] === arr[j]) count++;
  }
}

해시 맵 사고

시간 복잡도 : O(N)

1
2
3
4
5
const map = new Map();

for (let x of arr) {
  map.set(x, (map.get(x) || 0) + 1);
}

자주 나오는 패턴

  • 빈도수 카운팅

    1
    
    map.set(x, (map.get(x) || 0) + 1);
    
  • 존재 여부 체크

    1
    2
    3
    
    if (map.has(x)) {
    ...
    }
    
  • 쌍(pair) 찾기

    1
    2
    3
    
    if (map.has(target - x)) {
      return true;
    }
    
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.