Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
39 changes: 39 additions & 0 deletions valid-anagram/JinuCheon.py

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🏷️ 알고리즘 패턴 분석

  • 패턴: Hash Map / Hash Set, Sorting, Two Pointers
  • 설명: 해당 코드는 문자 빈도 비교를 위해 해시 맵을 사용하거나 정렬을 이용하여 배열 비교하는 방식으로 anagram 여부를 판단합니다. 해시 맵 기반 카운팅(또는 Counter)과 정렬 두 가지 접근이 핵심 패턴입니다.

📊 시간/공간 복잡도 분석

ℹ️ 이 파일에는 4가지 풀이가 포함되어 있어 각각 분석합니다.

풀이 1: Solution.isAnagram — Time: O(n) / Space: O(n)
복잡도
Time O(n)
Space O(n)

피드백: 해시맵으로 각 문자 등장 횟수를 세고, 두 문자열의 카운트를 비교한다. 추가 메모리 사용이 필요하나 간단하고 직관적이다.

개선 제안: 현재 구현이 적절해 보입니다.

풀이 2: Solution2.isAnagram — Time: O(n) / Space: O(k)
복잡도
Time O(n)
Space O(k)

피드백: 카운트 감소 방식으로 공간 사용을 약간 줄일 수 있다. 모든 값이 0이 되는지 확인하는 점이 핵심이다.

개선 제안: 현재 구현이 적절해 보입니다.

풀이 3: Solution3.isAnagram — Time: O(n) / Space: O(k)
복잡도
Time O(n)
Space O(k)

피드백: collections.Counter가 내부적으로 해시맵 구조를 사용하며 간결하고 구현이 짧다.

개선 제안: 현재 구현이 적절해 보입니다.

풀이 4: Solution.isAnagram — Time: O(n log n) / Space: O(n)
복잡도
Time O(n log n)
Space O(n)

피드백: 정렬이 필요해 시간 복잡도가 증가하지만 구현이 간단하다.

개선 제안: 현재 구현이 적절해 보입니다.

💡 풀이에 시간/공간 복잡도를 주석으로 남겨보세요!

Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
# my own solution
# O(n)
class Solution:
def isAnagram(self, s: str, t: str) -> bool:
count1 = {}
for ch in s:
count1[ch] = count1.get(ch, 0) + 1

count2 = {}
for ch in t:
count2[ch] = count2.get(ch, 0) + 1

return count1 == count2

# gpt suggestion
### half space
#### O(n)
class Solution2:
def isAnagram(self, s: str, t: str) -> bool:
count = {}
for ch in s:
count[ch] = count.get(ch, 0) + 1
for ch in t:
count[ch] = count.get(ch, 0) - 1
return all(v == 0 for v in count.values())

### simple solution (What??)
#### O(n)
#### Counter works like my own solution internally. But I'm ganna forgot this, becuase I'm learning now.
from collections import Counter
class Solution3:
def isAnagram(self, s: str, t: str) -> bool:
return Counter(s) == Counter(t)

### using sort
#### O(n log n)
class Solution:
def isAnagram(self, s: str, t: str) -> bool:
return sorted(s) == sorted(t)
Loading