Coding Test

5. Group Anagrams

jimmmy_jin 2025. 6. 12. 13:36

🧩 [Python 문제풀이] Group Anagrams - 딕셔너리 + 리스트 + append() 완벽 이해하기

 

이번 글에서는 LeetCode의 유명한 문제 중 하나인 “Group Anagrams” 를 파이썬으로 해결하면서,

많은 사람들이 헷갈려 하는 개념인 dict + list + .append() 구조를 함께 정리해본다

 


 

📌 문제 설명 (LeetCode 49 - Group Anagrams)

 

문자열 배열 strs가 주어졌을 때, 아나그램(anagram)끼리 묶어서 그룹으로 반환하라.

 

 

✅ 예시

Input: strs = ["eat", "tea", "tan", "ate", "nat", "bat"]
Output: [["eat","tea","ate"],["tan","nat"],["bat"]]

 

  • "eat", "tea", "ate"는 아나그램이므로 하나의 그룹
  • "tan""nat"도 마찬가지

 


 

🤔 어떻게 접근할까?

 

아나그램은 문자의 순서만 다를 뿐 구성은 동일하다

즉, 문자들을 정렬한 결과가 같으면 아나그램이라고 판단할 수 있다

 


 

✅ 핵심 아이디어

 

  • 문자열을 정렬하여 key로 사용
  • 같은 key를 가진 문자열들을 딕셔너리의 리스트에 저장
  • 마지막에 딕셔너리의 값들만 모아서 결과로 반환

 


 

✅ 정답 코드

from collections import defaultdict
from typing import List

class Solution:
    def groupAnagrams(self, strs: List[str]) -> List[List[str]]:
        groups = defaultdict(list)

        for word in strs:
            key = ''.join(sorted(word))  # 문자열 정렬 후 key 생성
            groups[key].append(word)     # key에 해당하는 그룹에 원래 단어 추가

        return list(groups.values())

 


 

💬 왜 

.append()

를 써야 할까?

 

여기서 딕셔너리 groups의 값은 리스트다

groups = defaultdict(list)

따라서 "aet" 같은 key가 생기면, 거기에 해당하는 단어들을 계속 추가해야 하므로 .append()를 사용해야함

 

예를 들어 다음과 같은 흐름이 됩니다:

wordsorted → keygroups[key]

“eat” “aet” [“eat”]
“tea” “aet” [“eat”, “tea”]
“tan” “ant” [“tan”]
“ate” “aet” [“eat”, “tea”, “ate”]

즉, .append()같은 아나그램 그룹에 단어를 계속 추가하기 위한 필수 도구임

 


 

❌ 자주 하는 실수

groups[key] = word   # ❌ 덮어쓰기만 됨. 기존 값 날라감

→ 이렇게 하면 그룹이 유지되지 않음. append()를 써야 계속 쌓임.

 


 

🔁 defaultdict가 없다면?

groups = {}

for word in strs:
    key = ''.join(sorted(word))
    if key not in groups:
        groups[key] = []
    groups[key].append(word)

 

  • 직접 리스트 초기화해야 함
  • defaultdict는 이 과정을 자동으로 해줘서 훨씬 편리함

 


 

🧠 핵심 요약

개념설명

dict[key] = [value] 리스트로 초기화
dict[key].append(value) 리스트에 항목 추가
defaultdict(list) 키가 없을 경우 자동으로 빈 리스트 생성
.append() 리스트에 값을 누적할 때 반드시 사용

 

'Coding Test' 카테고리의 다른 글

코테에서 자주 쓰이는 Python 코드/패턴 모음  (0) 2025.06.13
6. Top K Frequent Elements  (0) 2025.06.13
3. Valid Anagram  (0) 2025.06.11
2. Best Time to Buy and Sell Stock  (0) 2025.06.11
1. Two Sum  (1) 2025.06.09