From 1a4b92a8e1ff1ba0db4302fc6d9bd8ec6d6f489f Mon Sep 17 00:00:00 2001 From: CHAEWON PARK Date: Mon, 9 Nov 2026 21:37:07 +0900 Subject: [PATCH 01/11] Create Chaewon-Park-STUDY.py --- contains-duplicate/Chaewon-Park-STUDY.py | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 contains-duplicate/Chaewon-Park-STUDY.py diff --git a/contains-duplicate/Chaewon-Park-STUDY.py b/contains-duplicate/Chaewon-Park-STUDY.py new file mode 100644 index 0000000000..06b909417d --- /dev/null +++ b/contains-duplicate/Chaewon-Park-STUDY.py @@ -0,0 +1,13 @@ +class Solution: + def containsDuplicate(self, nums: list[int]) -> bool: + store = set() + # count를 쓰면 매번 전체 배열을 훑어 O(n^2) → Time out + # 대신 해시 기반 set을 쓰면 in 확인이 평균 O(1)이라 전체 O(n) + # Time: O(n), Space: O(n) + for elem in nums: + if elem in store: + return True + else: + store.add(elem) + return False + From 351227dccb98bd8f09e59f21b4f8c2d0091f8d99 Mon Sep 17 00:00:00 2001 From: CHAEWON PARK Date: Tue, 10 Nov 2026 16:06:39 +0900 Subject: [PATCH 02/11] Add twoSum method to Solution class Implement twoSum function using a hash map for O(n) time complexity. --- two-sum/Chaewon-Park-STUDY.py | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 two-sum/Chaewon-Park-STUDY.py diff --git a/two-sum/Chaewon-Park-STUDY.py b/two-sum/Chaewon-Park-STUDY.py new file mode 100644 index 0000000000..f8e1c5bab8 --- /dev/null +++ b/two-sum/Chaewon-Park-STUDY.py @@ -0,0 +1,32 @@ +class Solution: + #시간, 공간 복잡도:O(n) + def twoSum(self, nums: list[int], target: int) -> list[int]: + arr={} #elem를 key로 바로 저장하여 시간복잡도 O(1) + for i, elem in enumerate(nums): + if target -elem in arr: #왜 arr에서 찾는지 nums에서 찾으면 리스트라서 역시 복잡도 올라감 + # 두 수의 합이므로 나머지 짝이 arr에 있는지 확인 + return [arr[target - elem], i] + arr[elem] = i #없으면 arr에 저장 + + + + +# 처음 시도 풀이 DFS(기각, runtime: 7013ms) +# 시간 복잡도: O(n^2), 공간 복잡도: O(1) + +# class Solution: +# def twoSum(self, nums: list[int], target: int) -> list[int]: +# arr = [] + +# def dfs(start): +# if len(arr) == 2: +# return nums[arr[0]] + nums[arr[1]] == target #정답 발견시 True반환 +# for i in range(start, len(nums)): +# arr.append(i) +# if dfs(i + 1): # 정답이면 True를 위로 전달해 탐색 종료 +# return True +# arr.pop() +# return False + +# dfs(0) +# return arr From bf814aeae55eaf9458e5528ad799aad60ee31ff8 Mon Sep 17 00:00:00 2001 From: CHAEWON PARK Date: Thu, 12 Nov 2026 20:33:42 +0900 Subject: [PATCH 03/11] Add topKFrequent method to Solution class Implement topKFrequent method to find k most frequent elements. --- top-k-frequent-elements/Chaewon-Park-STUDY.py | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 top-k-frequent-elements/Chaewon-Park-STUDY.py diff --git a/top-k-frequent-elements/Chaewon-Park-STUDY.py b/top-k-frequent-elements/Chaewon-Park-STUDY.py new file mode 100644 index 0000000000..f23762145d --- /dev/null +++ b/top-k-frequent-elements/Chaewon-Park-STUDY.py @@ -0,0 +1,20 @@ +class Solution: + def topKFrequent(self, nums: list[int], k: int) -> list[int]: + # 전체 시간 복잡도: O(n log n), 공간 복잡도: O(n) + output=[] + frequent={} + + # count로 하면 전체를 다 훑기 때문에 O(n^2) + # dic 사용하여 공간 복잡도: O(n) + for elem in nums: + frequent[elem] = frequent.get(elem, 0) + 1 # dic에 기존 key가 없다면 value 1 저장 + #정렬 시 시간복잡도 최대 O(nlogn) + result = dict(sorted(frequent.items(), key=lambda x: x[1], reverse=True)) #내림차순 정 + + #빈도가 높은 원소 k개 추출: O(k) + for key in result: + output.append(key) + if len(output)==k: + break + return output + From fe2ab7a963e7c76121ba25d8fa271cddb762b127 Mon Sep 17 00:00:00 2001 From: CHAEWON PARK Date: Thu, 12 Nov 2026 21:18:32 +0900 Subject: [PATCH 04/11] Create Chaewon-Park-STUDY.py --- .../Chaewon-Park-STUDY.py | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 longest-consecutive-sequence/Chaewon-Park-STUDY.py diff --git a/longest-consecutive-sequence/Chaewon-Park-STUDY.py b/longest-consecutive-sequence/Chaewon-Park-STUDY.py new file mode 100644 index 0000000000..88fc10fd52 --- /dev/null +++ b/longest-consecutive-sequence/Chaewon-Park-STUDY.py @@ -0,0 +1,15 @@ +class Solution: + def longestConsecutive(self, nums: list[int]) -> int: + if not nums: + return 0 + nums = sorted(set(nums)) # 처음에는 nums.sort()로 풀었지만 + # elif문에 중복 처리 부분을 넣어야해서 set으로 중복 허용 x + k=len(nums) + + # Space: O(n), Time: O(n log n) - 정렬 O(n log n) + DP O(n) + dp=[1 for _ in range(k)] # dp[i] = nums[i]로 끝나는 연속 수열의 길이 + for i in range(1,k): + if nums[i]-nums[i-1]==1: + dp[i]=dp[i-1]+1 + return max(dp) + From 286bd2aad116c36d41db24d10b2d2f14165b2b36 Mon Sep 17 00:00:00 2001 From: CHAEWON PARK Date: Fri, 13 Nov 2026 07:34:51 +0900 Subject: [PATCH 05/11] Create Chaewon-Park-STUDY.py --- house-robber/Chaewon-Park-STUDY.py | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 house-robber/Chaewon-Park-STUDY.py diff --git a/house-robber/Chaewon-Park-STUDY.py b/house-robber/Chaewon-Park-STUDY.py new file mode 100644 index 0000000000..2d126d07d5 --- /dev/null +++ b/house-robber/Chaewon-Park-STUDY.py @@ -0,0 +1,13 @@ +class Solution: + def rob(self, nums: list[int]) -> int: + #시간, 공간 복잡도: O(n) + if len(nums)==1: + return sum(nums) + elif len(nums)==2: + return max(nums) + dp=nums.copy() # dp[i] = i번째 집의 money를 훔칠 때의 최대 누적 금액 + for i in range(2,len(nums)): + house3 = dp[i-3] if i >= 3 else 0 #i=2일 경우에는 i-3이 존재하지 않기에 따로 처리 + dp[i] += max(dp[i-2], house3) #인접한 집은 방문 불가 + return max(dp) + From af1ac83e8e04282d40363c4d841d6c57b526b7a6 Mon Sep 17 00:00:00 2001 From: CHAEWON PARK Date: Fri, 13 Nov 2026 21:48:42 +0900 Subject: [PATCH 06/11] Update Chaewon-Park-STUDY.py --- two-sum/Chaewon-Park-STUDY.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/two-sum/Chaewon-Park-STUDY.py b/two-sum/Chaewon-Park-STUDY.py index f8e1c5bab8..17a9929aea 100644 --- a/two-sum/Chaewon-Park-STUDY.py +++ b/two-sum/Chaewon-Park-STUDY.py @@ -1,12 +1,12 @@ class Solution: #시간, 공간 복잡도:O(n) def twoSum(self, nums: list[int], target: int) -> list[int]: - arr={} #elem를 key로 바로 저장하여 시간복잡도 O(1) + num_index={} #elem를 key로 바로 저장하여 시간복잡도 O(1) # 리뷰 후 수정!!: 기존에 arr로 선언하였는데 딕셔너리를 arr로 두면 변수명에 혼란이 있을 수 있기에 수정 for i, elem in enumerate(nums): - if target -elem in arr: #왜 arr에서 찾는지 nums에서 찾으면 리스트라서 역시 복잡도 올라감 - # 두 수의 합이므로 나머지 짝이 arr에 있는지 확인 - return [arr[target - elem], i] - arr[elem] = i #없으면 arr에 저장 + if target -elem in num_index: #왜 num_index에서 찾는지 nums에서 찾으면 리스트라서 역시 복잡도 올라감 + # 두 수의 합이므로 나머지 짝이 num_index에 있는지 확인 + return [num_index[target - elem], i] + num_index[elem] = i #없으면 저장 From 20ed0c55454ed1f85c75333908c942c100494120 Mon Sep 17 00:00:00 2001 From: CHAEWON PARK Date: Fri, 13 Nov 2026 21:55:27 +0900 Subject: [PATCH 07/11] Update Chaewon-Park-STUDY.py --- top-k-frequent-elements/Chaewon-Park-STUDY.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/top-k-frequent-elements/Chaewon-Park-STUDY.py b/top-k-frequent-elements/Chaewon-Park-STUDY.py index f23762145d..70e66ac541 100644 --- a/top-k-frequent-elements/Chaewon-Park-STUDY.py +++ b/top-k-frequent-elements/Chaewon-Park-STUDY.py @@ -1,15 +1,17 @@ +from collections import defaultdict #defaultdict 사용 위 + class Solution: def topKFrequent(self, nums: list[int], k: int) -> list[int]: # 전체 시간 복잡도: O(n log n), 공간 복잡도: O(n) output=[] - frequent={} + frequent=defaultdict(int) # 없는 key에 접근할시 0 생성 (리뷰 반영! ) # count로 하면 전체를 다 훑기 때문에 O(n^2) # dic 사용하여 공간 복잡도: O(n) for elem in nums: - frequent[elem] = frequent.get(elem, 0) + 1 # dic에 기존 key가 없다면 value 1 저장 + frequent[elem] +=1 # get 대신 #정렬 시 시간복잡도 최대 O(nlogn) - result = dict(sorted(frequent.items(), key=lambda x: x[1], reverse=True)) #내림차순 정 + result = dict(sorted(frequent.items(), key=lambda x: x[1], reverse=True)) #내림차순 정렬 #빈도가 높은 원소 k개 추출: O(k) for key in result: From 5556a08a8f3e04201439a2e0f4c3eb4ea2b9e4d1 Mon Sep 17 00:00:00 2001 From: CHAEWON PARK Date: Fri, 13 Nov 2026 21:56:10 +0900 Subject: [PATCH 08/11] defaultdict From 4b765b42ab3f0b6780f5c9c3fde85143fc072c61 Mon Sep 17 00:00:00 2001 From: CHAEWON PARK Date: Fri, 13 Nov 2026 21:59:25 +0900 Subject: [PATCH 09/11] Return top k frequent elements when count is reached Fix return statement to output top k frequent elements immediately after reaching the desired count. --- top-k-frequent-elements/Chaewon-Park-STUDY.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/top-k-frequent-elements/Chaewon-Park-STUDY.py b/top-k-frequent-elements/Chaewon-Park-STUDY.py index 70e66ac541..77cda3a63c 100644 --- a/top-k-frequent-elements/Chaewon-Park-STUDY.py +++ b/top-k-frequent-elements/Chaewon-Park-STUDY.py @@ -1,4 +1,4 @@ -from collections import defaultdict #defaultdict 사용 위 +from collections import defaultdict #defaultdict 사용 위함 class Solution: def topKFrequent(self, nums: list[int], k: int) -> list[int]: @@ -17,6 +17,6 @@ def topKFrequent(self, nums: list[int], k: int) -> list[int]: for key in result: output.append(key) if len(output)==k: - break + return output return output From 4cc57c9bce27e872695ce6edaf75ba6d55e84234 Mon Sep 17 00:00:00 2001 From: CHAEWON PARK Date: Fri, 13 Nov 2026 22:19:37 +0900 Subject: [PATCH 10/11] Update Chaewon-Park-STUDY.py --- house-robber/Chaewon-Park-STUDY.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/house-robber/Chaewon-Park-STUDY.py b/house-robber/Chaewon-Park-STUDY.py index 2d126d07d5..29d8814eb6 100644 --- a/house-robber/Chaewon-Park-STUDY.py +++ b/house-robber/Chaewon-Park-STUDY.py @@ -2,7 +2,7 @@ class Solution: def rob(self, nums: list[int]) -> int: #시간, 공간 복잡도: O(n) if len(nums)==1: - return sum(nums) + return nums[0] elif len(nums)==2: return max(nums) dp=nums.copy() # dp[i] = i번째 집의 money를 훔칠 때의 최대 누적 금액 From 7b88b7d4d22d53e75b80f1094eb8f664336381d0 Mon Sep 17 00:00:00 2001 From: CHAEWON PARK Date: Fri, 13 Nov 2026 22:20:59 +0900 Subject: [PATCH 11/11] Correct indentation and formatting in Chaewon-Park-STUDY.py Fix indentation and add newline at end of file.