Skip to content

Commit 93cd2a2

Browse files
authored
[hyedall] WEEK 01 solutions (#2926)
* two sum solution * contains duplicate solution * top k frequent elements solution * longest consecutive sequence solution * house robber solution
1 parent 7142ec1 commit 93cd2a2

5 files changed

Lines changed: 121 additions & 0 deletions

File tree

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
"""
2+
https://leetcode.com/problems/contains-duplicate/
3+
4+
μ‹œκ°„ λ³΅μž‘λ„: O(n)
5+
- set λ³€ν™˜ O(n)
6+
7+
곡간 λ³΅μž‘λ„: O(n)
8+
- set에 μ €μž₯
9+
"""
10+
11+
class Solution:
12+
def containsDuplicate(self, nums: list[int]) -> bool:
13+
if len(set(nums)) == len(nums):
14+
return False
15+
else:
16+
return True

β€Žhouse-robber/hyedall.pyβ€Ž

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
"""
2+
https://leetcode.com/problems/house-robber/description/
3+
4+
μ‹œκ°„ λ³΅μž‘λ„: O(n)
5+
- λͺ¨λ“  λ°°μ—΄ ν•œ λ²ˆμ”© 순회 O(n)
6+
- 선택/미선택 κ°’ 비ꡐ O(1)
7+
8+
곡간 λ³΅μž‘λ„: O(n)
9+
- 각 μΈλ±μŠ€κΉŒμ§€μ˜ μ΅œλŒ€ κΈˆμ•‘ dp 배열에 μ €μž₯
10+
11+
점화식:
12+
- dp[i] = max(nums[i] + dp[i - 2], dp[i - 1])
13+
- nums[i] + dp[i - 2]: ν˜„μž¬ 집을 ν„°λŠ” 경우
14+
- dp[i - 1]: ν˜„μž¬ 집을 ν„Έμ§€ μ•ŠλŠ” 경우
15+
"""
16+
17+
class Solution:
18+
def rob(self, nums: list[int]) -> int:
19+
n = len(nums)
20+
dp = [0] * n
21+
dp[0] = nums[0]
22+
23+
for i in range(1, n):
24+
dp[i] = max(nums[i] + dp[i - 2], dp[i - 1])
25+
26+
return dp[-1]
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
"""
2+
https://leetcode.com/problems/longest-consecutive-sequence/description/
3+
4+
μ‹œκ°„ λ³΅μž‘λ„: O(n)
5+
- set 생성 O(n)
6+
- 각 고유 숫자의 μ‹œμž‘μ  μ—¬λΆ€ 확인 O(n)
7+
- 연속 μˆ˜μ—΄ 탐색 O(n)
8+
9+
곡간 λ³΅μž‘λ„: O(n)
10+
- λͺ¨λ“  숫자λ₯Ό set에 μ €μž₯
11+
12+
풀이 :
13+
- μ‹œκ°„ λ³΅μž‘λ„ O(n)λ₯Ό λ§Œμ‘±μ‹œν‚€κΈ° μœ„ν•΄ set으둜 μ—°μ†λ˜λŠ” λ‹€μŒ 숫자의 쑴재 μ—¬λΆ€λ§Œ 확인
14+
- 이전 μˆ«μžκ°€ μžˆλŠ”μ§€ 확인 ν›„ μ‹œμž‘μ μ—μ„œλ§Œ μˆœνšŒν•˜μ—¬ 쀑볡 탐색 λ°©μ§€
15+
"""
16+
17+
class Solution:
18+
def longestConsecutive(self, nums: List[int]) -> int:
19+
num_set = set(nums)
20+
answer = 0
21+
22+
for num in num_set:
23+
# μ‹œμž‘μ μΈμ§€ 확인
24+
if num - 1 not in num_set:
25+
current = num
26+
length = 1
27+
28+
# 연속 숫자 탐색
29+
while current + 1 in num_set:
30+
current += 1
31+
length += 1
32+
33+
answer = max(answer, length)
34+
35+
return answer
36+
37+
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
"""
2+
https://leetcode.com/problems/top-k-frequent-elements/description/
3+
4+
μ‹œκ°„ λ³΅μž‘λ„: O(n log n)
5+
- λͺ¨λ“  숫자의 λΉˆλ„ 계산 O(n)
6+
- λΉˆλ„κ°€ 높은 k개 선택 O(n log k)
7+
- κ²°κ³Ό 리슀트 생성 O(k)
8+
9+
곡간 λ³΅μž‘λ„: O(n)
10+
- 고유 μˆ«μžλ³„ λΉˆλ„ μ €μž₯ O(n)
11+
- μ •λ‹΅ k개 μ €μž₯ O(k)
12+
"""
13+
14+
from collections import Counter
15+
16+
class Solution:
17+
def topKFrequent(self, nums: list[int], k: int) -> list[int]:
18+
counts = Counter(nums)
19+
answer = [n for n, f in counts.most_common(k)]
20+
21+
return answer

β€Žtwo-sum/hyedall.pyβ€Ž

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
"""
2+
https://leetcode.com/problems/two-sum/
3+
4+
μ‹œκ°„ λ³΅μž‘λ„: O(nΒ²)
5+
- 첫 번째 λ°˜λ³΅λ¬Έμ—μ„œ μ΅œλŒ€ n번 순회
6+
- 각 μˆ«μžλ§ˆλ‹€ λ’€μ˜ μˆ«μžλ“€μ„ λ‹€μ‹œ 순회
7+
- ν™•μΈν•˜λŠ” 숫자 쌍의 κ°œμˆ˜λŠ” μ•½ n(n - 1) / 2개
8+
9+
곡간 λ³΅μž‘λ„: O(1)
10+
- μž…λ ₯ 크기와 관계없이 i, j λ“±μ˜ κ³ μ •λœ λ³€μˆ˜λ§Œ μ‚¬μš©
11+
12+
"""
13+
14+
class Solution:
15+
def twoSum(self, nums: list[int], target: int) -> list[int]:
16+
n = len(nums)
17+
18+
for i in range(n):
19+
for j in range(i+1, n):
20+
if nums[i] + nums[j] == target:
21+
return [i, j]

0 commit comments

Comments
Β (0)