1
+ '''
2
+ ์ด ๋ฌธ์ ๋ ์ ๋ ฌ๋ ๋ฌธ์์ด์ ํค(key)๋ก ์ฌ์ฉํด ๊ฐ์ ์ ๋๊ทธ๋จ๋ผ๋ฆฌ ๊ทธ๋ฃนํํจ
3
+ ์ฆ, ๊ฐ ๋จ์ด๋ฅผ ์ ๋ ฌํ์ ๋ ๊ฐ์ ๊ฒฐ๊ณผ๊ฐ ๋์ค๋ฉด ๊ฐ์ ๊ทธ๋ฃน์
4
+
5
+ ["eat","tea","tan","ate","nat","bat"]
6
+ ๋จ์ด | ์ ๋ ฌ ๊ฒฐ๊ณผ | ํค | groups ๋์
๋๋ฆฌ ๋ณํ
7
+ eat aet aet {'aet': ['eat']}
8
+ tea aet aet {'aet': ['eat', 'tea']}
9
+ tan ant ant {'aet': [...], 'ant': ['tan']}
10
+ ate aet aet {'aet': ['eat','tea','ate'], ...}
11
+ nat ant ant {'ant': ['tan','nat'], ...}
12
+ bat abt abt {'abt': ['bat'], ...}
13
+
14
+ '''
15
+ class Solution :
16
+ def groupAnagrams (self , strs : List [str ]):
17
+ groups = defaultdict (list ) # defaultdict : ํค๊ฐ ์์ด๋ ์๋์ผ๋ก ๋น ๋ฆฌ์คํธ ์์ฑ
18
+
19
+ for word in strs : # ๊ฐ ๋จ์ด๋ฅผ ํ๋์ฉ ํ์ธ
20
+ sorted_word = '' .join (sorted (word )) # ๋จ์ด๋ฅผ ์ ๋ ฌํด ํค ์์ฑ (์: "tea" โ "aet")
21
+ groups [sorted_word ].append (word ) # ๊ฐ์ ํค๋ฅผ ๊ฐ์ง ๋จ์ด๋ฅผ ๊ทธ๋ฃน์ ์ถ๊ฐ
22
+
23
+ return list (groups .values ()) # ๊ทธ๋ฃน๋ค์ ๋ฆฌ์คํธ๋ก ๋ณํํด ๋ฐํ
24
+
25
+ '''
26
+ ์๊ฐ ๋ณต์ก๋: O(n ร klogk) + O(n) = O(n ร klogk)
27
+ n: ๋จ์ด ๊ฐ์
28
+ k: ๋จ์ด์ ์ต๋ ๊ธธ์ด
29
+ ๊ฐ ๋จ์ด ์ ๋ ฌ์ O(k log k) ์๊ฐ ์์ (ex. 5๊ธ์ โ 5 log 5 โ 11)
30
+ ๋จ์ด ์ ๋ ฌ: ๊ฐ ๋จ์ด๋ฅผ ์ ๋ ฌํ๋ ๋ฐ O(k log k) ์๊ฐ์ด ์์๋ฉ๋๋ค.
31
+ ํ์ด์ฌ์ sorted() ํจ์๋ ๋ด๋ถ์ ์ผ๋ก Timsort ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ๋ฉฐ,
32
+ ์ด์ ์๊ฐ ๋ณต์ก๋๋ ํ๊ท ์ ์ผ๋ก O(k log k)์
33
+ n๊ฐ์ ๋จ์ด ์ฒ๋ฆฌ: ๋ชจ๋ ๋จ์ด์ ๋ํด ์ ๋ ฌ์ ์ํํ๋ฏ๋ก n ร O(k log k) = O(n ร k log k)610.
34
+ ๋์
๋๋ฆฌ ์ฐ์ฐ: ์ ๋ ฌ๋ ํค๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋จ์ด๋ฅผ ๊ทธ๋ฃนํํ๋ ์์
์ O(1) ์๊ฐ์ ์ด๋ฃจ์ด์ง๋ฉฐ,
35
+ ์ ์ฒด์ ์ผ๋ก O(n) ์๊ฐ์ด ์ถ๊ฐ๋ฉ๋๋ค
36
+
37
+ ๊ณต๊ฐ ๋ณต์ก๋: O(n ร k) + O(n ร k) = O(n ร k)
38
+ ์ ๋ ฌ๋ ํค ์ ์ฅ: ๊ฐ ๋จ์ด๋ฅผ ์ ๋ ฌํ ๊ฒฐ๊ณผ๋ฅผ ๋ฌธ์์ด๋ก ์ ์ฅํจ
39
+ ๋จ์ด ๊ธธ์ด๊ฐ k์ผ ๋, ์ ๋ ฌ๋ ๋ฌธ์์ด ์ ์ฅ์ O(k) ๊ณต๊ฐ์ด ํ์ํจ
40
+ n๊ฐ์ ๋จ์ด์ ๋ํด ์ด O(n ร k) ๊ณต๊ฐ์ด ์ฌ์ฉ๋จ
41
+ ๋์
๋๋ฆฌ ๊ฐ ์ ์ฅ: ์๋ณธ ๋จ์ด๋ฅผ ๊ทธ๋ฃน๋ณ๋ก ์ ์ฅํจ. ๋ชจ๋ ๋จ์ด๋ฅผ ์ ์ฅํด์ผ ํ๋ฏ๋ก
42
+
43
+ '''
0 commit comments