[Algorithm] 해시

LeeKyungwon·2026년 4월 14일

공부 정리

목록 보기
5/24

📌 코딩테스트에서 해시(Hash) 정리 (JavaScript 기준)

✅ 해시(Hash)란?

키(key)를 통해 값을 빠르게 찾는 자료구조

  • 배열: 인덱스로 접근 → O(1)
  • 해시: 키로 접근 → O(1)

👉 핵심: 탐색 없이 바로 접근 가능


✅ JS에서 해시 사용하는 방법

1️⃣ Object

const obj = {};

obj["apple"] = 3;
obj["banana"] = 5;

console.log(obj["apple"]); // 3

2️⃣ Map (추천)

const map = new Map();

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

console.log(map.get("apple")); // 3

3️⃣ Set (중복 제거 / 존재 확인)

const set = new Set([1, 2, 3]);

set.has(2); // true

✅ Object vs Map

구분ObjectMap
키 타입문자열/심볼만모든 타입
순서 보장XO
사용성간단더 안정적

👉 코테에서는 Map 사용 추천


✅ 코테에서 해시 쓰는 이유

❗ 배열 vs 해시

방식시간복잡도
includesO(n)
Map / SetO(1)

👉 반복되면 시간초과 발생


✅ 핵심 사용 패턴

1️⃣ 빈도수 세기 (가장 중요)

const arr = ["a", "b", "a", "c", "a"];
const map = new Map();

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

2️⃣ 존재 여부 확인

const set = new Set(arr);

if (set.has("a")) {
  // 존재함
}

3️⃣ 값 매핑

const map = new Map();

map.set("철수", 90);
map.set("영희", 85);

map.get("철수"); // 90

❌ includes 사용 시 주의

arr.includes(x); // O(n)

👉 반복문 안에서 사용하면:

for (...) {
  arr.includes(x); // ❌ O(n^2) → 시간초과
}

✅ 언제 무엇을 써야 할까?

상황자료구조
존재 여부 확인Set
빈도수 / 카운팅Map
값 저장 및 조회Map
단순 1회 확인includes 가능

🔥 핵심 요약

•	해시는 빠른 조회(O(1))를 위한 구조
•	코테에서는 Map / Set 활용이 핵심
•	includes는 반복문 안에서 사용하면 위험

💡 한 줄 정리

배열은 탐색, 해시는 즉시 조회

0개의 댓글