[Hashmap] Group Anagrams

Jeenie·2025년 5월 8일

https://leetcode.com/problems/group-anagrams/

원리

초기 제출(실패)

stack으로 시도해보려다가 실패하고,
반복문의 인덱스로 currentSortedChar와 nextSortedChar로 해결해보려고 하다가 실패하고....
map 구조를 떠올렸지만 key-value를 잘못 설정해서 실패했다.

chatGPT의 피드백

너가 시도했던 3차 방법은 좋은 방향으로 가고 있었지만, 몇 가지 핵심 아이디어가 빠져 있어서 완성까지 연결되기 어려웠던 방식이에요. 어떤 점이 부족했고, 어떻게 보완하면 쓸 수 있었는지 자세히 설명해줄게요.


🔍 너의 3차 시도 핵심 분석

for (let i = 0; i < strs.length; i++) {
    const currentSortedChar = strs[i].split("").sort().join("")
    console.log("currentSortedChar", currentSortedChar)
    arr.push()
    ...
}

✅ 시도한 방향의 장점

  • ✔️ 애너그램은 정렬하면 같은 문자열이 된다는 핵심 아이디어를 잡음 → 이건 정답 접근의 핵심!
  • ✔️ strs[i].split("").sort().join("")으로 정렬 문자열을 만들고 있음 → 아주 잘했음.

❌ 부족했던 부분
3. 이중 비교 (strs[i], strs[i+1]) 방식은 정렬되지 않은 입력에서는 잘 작동하지 않음
예: ["eat", "tea", "tan", "ate", "nat", "bat"]처럼 순서가 섞여 있는 경우

개선

var groupAnagrams = function (strs) {
    // anagram인 것들끼리 그룹으로 묶어서 리턴
    // "any order" 라고 했으니 sort 쓰면 될듯

    const map = new Map()
    for (const str of strs) {
        const sortedStr = str.split("").sort().join("")
        if (map.has(sortedStr)) {
            map.get(sortedStr).push(str)
        } else {
            map.set(sortedStr, [str])
        }
    }
    return Array.from(map.values())
};

관련 연습문제

패턴설명예시 문제
해시맵 기반 그룹핑기준을 정해서 같은 그룹으로 묶기Group Anagrams
문자열 정렬 후 비교문자열의 문자 조합을 판별하기Valid Anagram
Map with array values한 key에 여러 값 쌓기Find Duplicate File in System
문자 카운트 배열로 key 만들기정렬 대신 문자 수를 key로 사용Group Anagrams (Optimized)

느낀 점

애너그램이라서 sort, 저장을 key-value로 해야할 것 같아 Map 자료구조를 떠올렸다니 기특하다!
(틀렸지만)

key-value로 해야겠다는 생각을 한 것도 잘했어
(틀렸지만)

조금 더 깊게 생각해보자.
종이와 펜으로 내가 원하는 인풋 - 처리과정 - 아웃풋을 그려보는게 좋겠다.

profile
Web Front-end developer

0개의 댓글