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