Skip to content

Commit d35b5fa

Browse files
committed
feat: group-anagrams 문제 풀이
1 parent b11d8e7 commit d35b5fa

File tree

1 file changed

+58
-0
lines changed

1 file changed

+58
-0
lines changed

group-anagrams/unpo88.py

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
class Solution:
2+
def groupAnagrams(self, strs: List[str]) -> List[List[str]]:
3+
anagrams = defaultdict(list)
4+
for s in strs:
5+
anagrams["".join(sorted(s))].append(s)
6+
7+
return list(anagrams.values())
8+
9+
10+
"""
11+
================================================================================
12+
풀이 과정
13+
================================================================================
14+
15+
[문제 이해]
16+
────────────────────────────────────────────────────────────────────────────────
17+
1. 문자열 배열 strs가 주어지면 애너그램끼리 그룹화하여 반환
18+
2. 애너그램: 같은 문자들을 재배열하여 만든 단어 (각 문자를 한 번씩만 사용)
19+
3. 결과의 순서는 상관없음
20+
21+
예시 1: ["eat", "tea", "tan", "ate", "nat", "bat"]
22+
→ [["bat"], ["nat", "tan"], ["ate", "eat", "tea"]]
23+
24+
예시 2: [""]
25+
→ [[""]]
26+
27+
예시 3: ["a"]
28+
→ [["a"]]
29+
30+
31+
[접근 방법] 해시맵 + 정렬 키
32+
────────────────────────────────────────────────────────────────────────────────
33+
4. 애너그램의 특징: 정렬하면 같은 문자열이 됨
34+
- "eat" → "aet"
35+
- "tea" → "aet"
36+
- "ate" → "aet"
37+
38+
5. 정렬된 문자열을 키로 사용하는 해시맵 구성
39+
- 키: 정렬된 문자열
40+
- 값: 해당 애너그램 그룹 리스트
41+
42+
6. 구현:
43+
anagrams = defaultdict(list)
44+
for s in strs:
45+
anagrams["".join(sorted(s))].append(s)
46+
return list(anagrams.values())
47+
48+
49+
[복잡도 분석]
50+
────────────────────────────────────────────────────────────────────────────────
51+
7. 시간복잡도: O(n × k log k)
52+
- n: 문자열 개수
53+
- k: 가장 긴 문자열의 길이
54+
- 각 문자열을 정렬하는데 O(k log k)
55+
56+
8. 공간복잡도: O(n × k)
57+
- 해시맵에 모든 문자열 저장
58+
"""

0 commit comments

Comments
 (0)