Skip to content
Merged
Show file tree
Hide file tree
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
8 changes: 8 additions & 0 deletions contains-duplicate/freemjstudio.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
  • 설명: 주어진 코드는 배열의 중복 여부를 검사하기 위해 집합으로 중복 제거 후 길이를 비교합니다. 해시 기반 집합으로 중복 여부를 판단하는 일반적인 패턴입니다.

📊 시간/공간 복잡도 분석

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

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

피드백: 리스트를 한 번 순회해 모든 원소의 중복 여부를 판별하므로 시간 복잡도는 선형이고, 중복 여부를 저장하기 위한 추가 공간이 필요합니다.

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

풀이 2: Solution — Time: O(n) / Space: O(n)
복잡도
Time O(n)
Space O(n)

피드백: 입력 크기에 비례한 추가 해시셋을 사용합니다. 모든 원소를 한 번씩 확인합니다.

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

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

Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
class Solution:
def containsDuplicate(self, nums: List[int]) -> bool:
first = len(nums) # O(1) : 리스트 객체는 이미 자기자신의 길이를 저장하고 있음
set_nums = set(nums) # O(N)
second = len(set_nums)
return (first != second)

# 시간 복잡도 : O(N)
29 changes: 29 additions & 0 deletions top-k-frequent-elements/freemjstudio.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, Heap / Priority Queue, Greedy
  • 설명: 해당 코드는 각 원소의 빈도수를 해시 맵으로 집계하고, 최소 힙을 이용해 상위 k개를 선별합니다. 빈도 기반의 선택은 그리디 접근으로 k개를 유지하며 결과를 구성합니다.

📊 시간/공간 복잡도 분석

복잡도
Time O(n log k)
Space O(n + k)

피드백: 빈도 계산은 O(n). 고정 크기 힙을 사용해 상위 k개를 유지하므로 전체 시간은 O(n log k)이고 공간은 O(n) 또는 O(k)로 요약될 수 있습니다.

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

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

Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
import heapq

class Solution:
def topKFrequent(self, nums: List[int], k: int) -> List[int]:
answer = []
count = dict()
heap = []
if len(nums) <= 1:
return nums
# O(N)
for num in nums:
count[num] = count.get(num, 0) + 1

# heap 의 크기는 최대 k 로 제한함.
# unique 한 M개의 숫자를 선형 순회 O(M)
for num, freq in count.items():
if len(heap) < k:
heapq.heappush(heap, (freq, num)) # O(logK)
else:
if heap[0][0] < freq:
heapq.heappop(heap) # O(logK)
heapq.heappush(heap, (freq, num)) # O(logK)

for _ in range(k):
k, v = heapq.heappop(heap)
answer.append(v)

return answer

12 changes: 12 additions & 0 deletions two-sum/freemjstudio.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, Two Pointers
  • 설명: 해당 코드는 한 번 순회하면서 해시맵에 이전 수들의 값을 저장하고 목표 값과의 차이를 확인한다. 이를 통해 두 수의 합이 목표와 같은지를 빠르게 판별하므로 해시 맵 패턴과 함께 문제의 성격상 투 포인터 없이도 해결되지만, 실제로 간단한 해시 맵 기반의 탐색 패턴으로 분류된다.

📊 시간/공간 복잡도 분석

복잡도
Time O(n)
Space O(n)

피드백: 목표 합을 이루는 보완 값을 맵에 저장하고, 현재 숫자를 읽으면서 보완 값을 검사합니다.

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

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

Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
class Solution:
def twoSum(self, nums: List[int], target: int) -> List[int]:
answer = []
hashmap = dict()
for i in range(len(nums)):
current_num = nums[i]
diff = target - current_num
if diff in hashmap.keys():
return [i, hashmap[diff]]
hashmap[current_num] = i # store the index of current num

return answer
Loading