Skip to content

Commit 2603248

Browse files
committed
Group Anagrams
1 parent ff62989 commit 2603248

File tree

1 file changed

+46
-0
lines changed

1 file changed

+46
-0
lines changed

โ€Žgroup-anagrams/socow.pyโ€Ž

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
"""
2+
49. Group Anagrams
3+
https://leetcode.com/problems/group-anagrams/
4+
5+
๋ฌธ์ œ: ๋ฌธ์ž์—ด ๋ฐฐ์—ด์ด ์ฃผ์–ด์งˆ ๋•Œ, ์• ๋„ˆ๊ทธ๋žจ๋ผ๋ฆฌ ๊ทธ๋ฃน์œผ๋กœ ๋ฌถ์–ด์„œ ๋ฐ˜ํ™˜ํ•˜๋ผ.
6+
์• ๋„ˆ๊ทธ๋žจ = ๊ฐ™์€ ๋ฌธ์ž๋“ค๋กœ ์ด๋ฃจ์–ด์ง„ ๋‹จ์–ด (์ˆœ์„œ๋งŒ ๋‹ค๋ฆ„)
7+
8+
์˜ˆ์‹œ:
9+
Input: strs = ["eat", "tea", "tan", "ate", "nat", "bat"]
10+
Output: [["bat"], ["nat", "tan"], ["ate", "eat", "tea"]]
11+
12+
"eat", "tea", "ate" โ†’ ๋ชจ๋‘ a, e, t๋กœ ๊ตฌ์„ฑ โ†’ ๊ฐ™์€ ๊ทธ๋ฃน
13+
"tan", "nat" โ†’ ๋ชจ๋‘ a, n, t๋กœ ๊ตฌ์„ฑ โ†’ ๊ฐ™์€ ๊ทธ๋ฃน
14+
"bat" โ†’ ํ˜ผ์ž โ†’ ๋ณ„๋„ ๊ทธ๋ฃน
15+
"""
16+
17+
18+
# =============================================================================
19+
# ํ’€์ด 1: ์ •๋ ฌ(Sorted)์„ ํ‚ค๋กœ ์‚ฌ์šฉ
20+
# =============================================================================
21+
# ์•„์ด๋””์–ด: ์• ๋„ˆ๊ทธ๋žจ์€ ์ •๋ ฌํ•˜๋ฉด ๊ฐ™์€ ๋ฌธ์ž์—ด์ด ๋œ๋‹ค!
22+
# "eat" โ†’ "aet", "tea" โ†’ "aet", "ate" โ†’ "aet"
23+
# ์ •๋ ฌ๋œ ๋ฌธ์ž์—ด์„ ๋”•์…”๋„ˆ๋ฆฌ์˜ ํ‚ค๋กœ ์‚ฌ์šฉํ•˜์—ฌ ๊ทธ๋ฃนํ™”
24+
#
25+
# ์‹œ๊ฐ„ ๋ณต์žก๋„: O(n * k log k)
26+
# - n: ๋ฌธ์ž์—ด ๊ฐœ์ˆ˜
27+
# - k: ๊ฐ€์žฅ ๊ธด ๋ฌธ์ž์—ด์˜ ๊ธธ์ด
28+
# - ๊ฐ ๋ฌธ์ž์—ด์„ ์ •๋ ฌํ•˜๋Š”๋ฐ O(k log k)
29+
#
30+
# ๊ณต๊ฐ„ ๋ณต์žก๋„: O(n * k) - ๋ชจ๋“  ๋ฌธ์ž์—ด์„ ๋”•์…”๋„ˆ๋ฆฌ์— ์ €์žฅ
31+
# =============================================================================
32+
class Solution:
33+
def groupAnagrams(self, strs: List[str]) -> List[List[str]]:
34+
anagram_map = {} # ์ผ๋ฐ˜ ๋”•์…”๋„ˆ๋ฆฌ
35+
36+
for word in strs:
37+
sorted_key = "".join(sorted(word))
38+
39+
# ํ‚ค๊ฐ€ ์—†์œผ๋ฉด ๋จผ์ € ๋นˆ ๋ฆฌ์ŠคํŠธ ์ƒ์„ฑ
40+
if sorted_key not in anagram_map:
41+
anagram_map[sorted_key] = []
42+
43+
# ๊ทธ ๋‹ค์Œ append
44+
anagram_map[sorted_key].append(word)
45+
46+
return list(anagram_map.values())

0 commit comments

Comments
ย (0)