1+ from collections import Counter
2+
3+
4+ class Solution :
5+ def isAnagram (self , s : str , t : str ) -> bool :
6+ if len (s ) != len (t ):
7+ return False
8+
9+ return Counter (s ) == Counter (t )
10+ """
11+ ================================================================================
12+ 풀이 과정 - 08:27 시작 ~ 08:32 종료 (5분 소요)
13+ ================================================================================
14+
15+ 1. s, t 문자열이 주어지는데
16+ 2. s와 t가 anagram이면 True, 그렇지 않으면 False 반환
17+ 3. anagram이란 어떤 단어나 구의 글자들을 모두 한 번씩만 사용하여 순서를 바꾸어 새롭게 만든 단어나 구
18+ 4. 그러면 문자 정렬을 해서 같은지 비교를 하는 방법이 있을 것 같고
19+ 5. 근데 그렇게 하면 문자 정렬에 시간 복잡도가 증가하니까
20+ 6. 각 문자의 개수를 카운팅하는 해싱 Counter를 이용해서
21+ 7. 서로의 키 값이 동일한지 확인한다거나 하면 조금 더 빠르게 처리가 가능할듯?
22+
23+
24+ [1차 시도] 반복문으로 직접 비교
25+ ────────────────────────────────────────────────────────────────────────────────
26+ 8. Counter로 각 문자의 개수를 세서 비교하는 방식 구현
27+
28+ if len(s) != len(t):
29+ return False
30+ s_count = Counter(s)
31+ t_count = Counter(t)
32+
33+ for key, value in s_count.items():
34+ if value != t_count[key]:
35+ return False
36+ return True
37+
38+ 9. 정상적으로 통과되는 것 확인 완료
39+
40+
41+ [2차 개선] Counter 객체 직접 비교
42+ ────────────────────────────────────────────────────────────────────────────────
43+ 10. Counter 객체끼리 직접 비교가 가능하다는 것을 알게 됨
44+ 11. 반복문 제거하고 더 간결하게 개선
45+
46+ if len(s) != len(t):
47+ return False
48+
49+ return Counter(s) == Counter(t)
50+
51+ 12. 코드가 더 간결해지고 가독성도 향상됨
52+ 13. 최종 통과 확인 완료
53+ 14. 근데 그럼에도 len 길이를 비교하는것은 O(1) 측면에서 좋다는 답변도 받음
54+
55+ [다른 풀이 탐구] Counter를 사용하지 않고 직접 딕셔너리를 만들어서 처리한다면?
56+ ────────────────────────────────────────────────────────────────────────────────
57+ counter = {}
58+ if len(s) != len(t):
59+ return False
60+
61+ for char in s:
62+ counter[char] = counter.get(char,0) + 1
63+
64+ for char in t:
65+ counter[char] = counter.get(char,0) - 1
66+ if counter[char] < 0:
67+ return False
68+
69+ return True
70+
71+ [다른 풀이 탐구] s와 t는 소문자만 받아올 수 있는데 그러면, 배열로 소문자 개수만큼 인덱싱해서 처리하는 방법도?
72+ ────────────────────────────────────────────────────────────────────────────────
73+ """
0 commit comments