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