File tree Expand file tree Collapse file tree 1 file changed +61
-3
lines changed Expand file tree Collapse file tree 1 file changed +61
-3
lines changed Original file line number Diff line number Diff line change 11"""
22[문제풀이]
33# Inputs
4-
4+ - 문자열 배열 strs
55# Outputs
6-
6+ - anagram 끼리 그룹핑하여 배열 return
77# Constraints
8-
8+ - 1 <= strs.length <= 10^4
9+ - 0 <= strs[i].length <= 100
10+ - strs[i] consists of lowercase English letters.
911# Ideas
12+ 하나를 기준으로 두고 나머지 요소들을 탐색
13+ 1. 왠지 bfs느낌?
14+ 한 기준 두고, 그 기준이랑 같은 요소 찾아서 묶기
15+ -> 묶여진 요소는 visited true로 마킹
16+ visited 가 모두 true면 탐색 끝
17+
18+ 같은 anagram인지는 정렬로 파악 가능
19+
20+ 위의 방법으로 하니 시간초과 발생
21+ -> 기준이 되는 녀석 고르고, 그 녀석의 anagram찾는 과정이 모두 for문이라 비효율적인듯
22+
23+ 2. 한번의 for문으로 되나?
24+ for문 돌며 defaultdict에
25+ 만약 dict에 없는 키(문자열 sort된 값)라면 키 등록하고, value에 원래 값 삽입
26+ 있는 키라면 그 키의 value에만 삽입
27+ -> O(n)으로 가능할듯
1028
1129[회고]
1230
1331"""
1432
33+ # 첫 제출 - 테케만 정답. 시간초과
34+ class Solution :
35+ def groupAnagrams (self , strs : List [str ]) -> List [List [str ]]:
36+ ret = []
37+ n = len (strs )
38+ v = [False for _ in range (n )]
39+
40+
41+ while not all (v ):
42+ q = []
43+ for idx , s in enumerate (strs ):
44+ if not v [idx ]:
45+ q .append (strs [idx ])
46+ v [idx ] = True
47+ break
48+
49+ for idx , vv in enumerate (v ):
50+ if not vv and sorted (strs [idx ]) == sorted (q [- 1 ]):
51+ q .append (strs [idx ])
52+ v [idx ] = True
53+
54+ ret .append (q )
55+
56+ return ret
57+
58+ # 두 번째 제출 - 정답
59+ from collections import defaultdict
60+
61+ class Solution :
62+ def groupAnagrams (self , strs : List [str ]) -> List [List [str ]]:
63+ ret = []
64+ dic = defaultdict (list )
65+
66+ for s in strs :
67+ dic [str (sorted (s ))].append (s )
68+
69+ for v in dic .values ():
70+ ret .append (v )
71+
72+ return ret
1573
You can’t perform that action at this time.
0 commit comments