@@ -2,7 +2,8 @@ function isAnagram(s: string, t: string): boolean {
22 /* 방법 1:
33 * 문자열을 순서대로 정렬 후 맞는지 비교한다.
44
5- * 복잡도: O(n log n)
5+ * 시간 복잡도: O(n log n) - 문자열 정렬에 O(n log n) 시간이 소요됨
6+ * 공간 복잡도: O(n) - 정렬된 문자열을 저장하기 위한 추가 배열 필요
67 */
78 const checkAnagramFromSort = ( ) : boolean => {
89 if ( s . length !== t . length ) {
@@ -25,8 +26,9 @@ function isAnagram(s: string, t: string): boolean {
2526 /* 방법 2: (Failed)
2627 * Size 체크 후 Set객체에 s단어를 할당한 후 t에서 has메소드로 체크
2728
28- * 복잡도 : O(n)
29- * 실패 이유 : Set 객체를 사용하여 중복 문자가 사라지기 때문에 정상적인 비교가 불가
29+ * 시간 복잡도: O(n) - 문자열을 한 번씩 순회
30+ * 공간 복잡도: O(k) - k는 고유 문자의 수 (최대 알파벳 개수만큼)
31+ * 실패 이유: Set 객체를 사용하여 중복 문자가 사라지기 때문에 정상적인 비교가 불가
3032 */
3133 const checkAnagramFromSetObject = ( ) : boolean => {
3234 const sSet = new Set ( s ) ;
@@ -46,47 +48,47 @@ function isAnagram(s: string, t: string): boolean {
4648 } ;
4749
4850 /* 방법3:
49- * culculateMap을 만들어 둠
50- * Record <string, number> 타입
51+ * countMap을 만들어 둠
52+ * Map <string, number> 타입
5153 * S, T의 길이가 일치한다는 가정 하에
5254 * S는 알파벳마다 +1을 T는 -1을 계산
5355 * 값이 0이 되는 순간 항상 삭제
54- * 전부 돌았을 때 culculateMap .size가 0인 경우 true
56+ * 전부 돌았을 때 countMap .size가 0인 경우 true
5557 *
56- * 복잡도: O(n)
58+ * 시간 복잡도: O(n) - 문자열을 한 번만 순회
59+ * 공간 복잡도: O(k) - k는 고유 문자의 수 (최대 알파벳 개수만큼)
5760 */
58- const checkAnagramFromCulculateMap = ( ) :boolean => {
61+ const checkAnagramFromCountMap = ( ) :boolean => {
5962 if ( s . length !== t . length ) return false ;
6063
61- const culculateMap = new Map < string , number > ( ) ;
64+ const countMap = new Map < string , number > ( ) ;
6265
6366 for ( let i = 0 ; i < s . length ; i ++ ) {
6467 const sWord = s [ i ] ;
6568 const tWord = t [ i ] ;
6669
67- const prevSValue = culculateMap . get ( sWord ) ?? 0 ;
70+ const prevSValue = countMap . get ( sWord ) ?? 0 ;
6871 const nextSValue = prevSValue + 1 ;
6972 if ( nextSValue === 0 ) {
70- culculateMap . delete ( sWord )
73+ countMap . delete ( sWord )
7174 } else {
72- culculateMap . set ( sWord , nextSValue ) ;
75+ countMap . set ( sWord , nextSValue ) ;
7376 }
7477
75- const prevTValue = culculateMap . get ( tWord ) ?? 0 ;
78+ const prevTValue = countMap . get ( tWord ) ?? 0 ;
7679 const nextTValue = prevTValue - 1 ;
7780 if ( nextTValue === 0 ) {
78- culculateMap . delete ( tWord )
81+ countMap . delete ( tWord )
7982 } else {
80- culculateMap . set ( tWord , nextTValue ) ;
83+ countMap . set ( tWord , nextTValue ) ;
8184 }
8285 } ;
8386
84-
85- return culculateMap . size === 0 ;
87+ return countMap . size === 0 ;
8688
8789 } ;
8890
8991 // return checkAnagramFromSort();
9092 // return checkAnagramFromSetObject();
91- return checkAnagramFromCulculateMap ( ) ;
93+ return checkAnagramFromCountMap ( ) ;
9294} ;
0 commit comments