🧩 [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 |