|

해시맵 문제 풀이 패턴: 빈도수와 중복 체크 문제를 빠르게 푸는 방법

해시맵 문제 풀이 패턴 대표 이미지
해시맵은 값 자체보다 빠른 조회와 카운팅이 필요할 때 강력하다

해시맵 문제 풀이 패턴을 익히면 코딩테스트 체감 속도가 확실히 빨라질 때가 많습니다. 많은 문제에서 핵심은 정렬 자체가 아니라, 어떤 값이 이미 나왔는지 빠르게 확인하고 세는 일에 있기 때문입니다.

이번 글에서는 해시맵을 단순 자료구조 정의로 설명하지 않고, 빈도수 세기, 중복 체크, 인덱스 저장 같은 패턴이 보일 때 왜 해시맵이 먼저 떠올라야 하는지를 중심으로 정리하겠습니다.

해시맵 문제 풀이 패턴 요약 카드
핵심을 빠르게 잡아주는 요약 카드

해시맵은 무엇을 잘하나

해시맵은 key를 기준으로 값을 빠르게 찾는 데 강합니다. 즉 “이 값이 있었나?”, “몇 번 나왔나?”, “이 값은 어디에 있었나?” 같은 질문에 잘 맞습니다.

  1. 존재 여부 확인
  2. 빈도수 카운팅
  3. 값과 인덱스 연결
  4. 중복 제거 보조

즉 해시맵을 떠올린다는 것은 배열 전체를 다시 훑기보다, 필요한 정보를 key-value 형태로 미리 저장하겠다는 뜻입니다.


문제에서 어떤 신호가 보이면 해시맵일까

  • 이미 본 값인지 빠르게 확인해야 한다
  • 같은 값이 몇 번 나오는지 세야 한다
  • 두 수의 합, 중복 문자열, 아나그램처럼 대응 관계를 봐야 한다
  • 정렬 없이 빠르게 조회하는 편이 자연스럽다

예를 들어 투썸, 출석 체크, 단어 카운팅, 아나그램 판별 같은 문제는 해시맵 패턴이 아주 강하게 들어갑니다.

counts = {}
for x in nums:
    counts[x] = counts.get(x, 0) + 1

for x, cnt in counts.items():
    print(x, cnt)

unordered_map 설명을 보면 평균적으로 빠른 조회가 핵심이라는 점이 잘 드러납니다. 실전에서는 이 특성이 카운팅과 중복 체크 문제에서 가장 크게 빛납니다.

이런 빈도수 패턴은 해시맵 입문에서 가장 먼저 익혀야 하는 축입니다. 코드가 단순해 보여도 실전 활용도는 매우 높습니다.


카운팅 말고도 인덱스 저장이 중요할 때가 있다

모든 해시맵 문제가 카운팅으로 끝나지는 않습니다. 어떤 값이 처음 등장한 위치나 마지막 등장 위치를 기억해야 할 때도 많습니다. 이때는 값 자체보다 위치 정보가 중요합니다.

즉 해시맵은 단순히 개수 세는 도구가 아니라, 문제를 풀기 위해 필요한 빠른 조회 정보를 저장하는 공간으로 보는 편이 더 맞습니다.


자주 하는 실수

  1. 해시맵으로 바로 풀 수 있는 문제를 정렬부터 한다
  2. 카운트 초기값 처리를 자주 틀린다
  3. 중복 체크와 빈도수 문제를 같은 식으로만 본다
  4. 사실은 배열 인덱스로 충분한 문제인데 해시맵을 과하게 쓴다

즉 해시맵은 매우 강력하지만, key 공간이 작고 인덱스로 바로 접근 가능한 문제라면 배열이 더 단순한 선택일 수도 있습니다.

빠른 조회 감각은 누적합 글처럼 미리 저장하는 사고와도 통하고, 파이썬 쪽 감각은 리스트 컴프리헨션 글과도 읽기 흐름이 이어집니다.


해시맵 문제 풀이 패턴 흐름 그림
핵심 흐름을 그림으로 다시 정리한 이미지

마무리

해시맵 문제 풀이의 핵심은 자료구조 이름을 외우는 것이 아니라, 문제에서 “빠른 조회가 필요한가”를 먼저 보는 일입니다.

즉 빈도수, 중복 체크, 인덱스 저장 같은 신호가 보이면, 배열 전체를 다시 보기 전에 해시맵부터 떠올리는 습관이 큰 차이를 만듭니다.

함께보면 좋은 글