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 1
1
"""
2
2
[문제풀이]
3
3
# Inputs
4
-
4
+ - 문자열 배열 strs
5
5
# Outputs
6
-
6
+ - anagram 끼리 그룹핑하여 배열 return
7
7
# Constraints
8
-
8
+ - 1 <= strs.length <= 10^4
9
+ - 0 <= strs[i].length <= 100
10
+ - strs[i] consists of lowercase English letters.
9
11
# 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)으로 가능할듯
10
28
11
29
[회고]
12
30
13
31
"""
14
32
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
15
73
You can’t perform that action at this time.
0 commit comments