File tree Expand file tree Collapse file tree 1 file changed +33
-0
lines changed Expand file tree Collapse file tree 1 file changed +33
-0
lines changed Original file line number Diff line number Diff line change
1
+ /**
2
+ * 주어진 문자열 배열에서 Anagram을 그룹화 해서 배열 만들기
3
+ * @param {string[] } strs - 문자열 배열
4
+ * @returns {string[][] } Anagram을 그룹 배열
5
+ *
6
+ * 문자열들을 정렬해서 Map에 담아서 존재하면 그 때의 문자를 value로 추가
7
+ * 존재하지 않으면 새로운 배열을 value로 추가
8
+ *
9
+ * 시간 복잡도: O(N * M * log(M))
10
+ * - N은 문자열 배열의 길이
11
+ * - M은 각 문자열의 평균 길이 (정렬 시간 때문)
12
+ * 공간 복잡도: O(N * M)
13
+ * - 해시맵에 저장되는 문자열 그룹 때문
14
+ */
15
+ function groupAnagrams ( strs : string [ ] ) : string [ ] [ ] {
16
+ const anagramMap : Map < string , string [ ] > = new Map ( ) ;
17
+ for ( const str of strs ) {
18
+
19
+ // 정렬된 문자열
20
+ const sortedStr = str . split ( '' ) . sort ( ) . join ( '' ) ;
21
+
22
+ // 정렬된 문자열이 존재하는 않는 경우
23
+ if ( ! anagramMap . has ( sortedStr ) ) {
24
+ anagramMap . set ( sortedStr , [ ] )
25
+ }
26
+
27
+ // 정렬된 문자열을 key로 하는 value str 추가
28
+ anagramMap . get ( sortedStr ) ?. push ( str ) ;
29
+ }
30
+
31
+ // anagramMap에서 values만 배열로해서 출력
32
+ return Array . from ( anagramMap . values ( ) )
33
+ }
You can’t perform that action at this time.
0 commit comments