Skip to content

Commit bf7128c

Browse files
authored
Merge pull request #1676 from hu6r1s/main
[hu6r1s] WEEK 01 solutions
2 parents 46ac932 + 596ce89 commit bf7128c

File tree

5 files changed

+133
-0
lines changed

5 files changed

+133
-0
lines changed
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
from collections import Counter
2+
3+
class Solution:
4+
# ์‹œ๊ฐ„๋ณต์žก๋„: O(n) - Counter(nums)๋Š” n๋ฒˆ ์ˆœํšŒํ•˜๋ฉฐ ๊ฐ ์›์†Œ์˜ ๊ฐœ์ˆ˜๋ฅผ ์„ธ๊ณ , cnt.items()๋Š” ์ตœ๋Œ€ n๊ฐœ์˜ (key, value) ์Œ์„ ํฌํ•จํ•˜๋ฏ€๋กœ ์ตœ๋Œ€ n๋ฒˆ ์ˆœํšŒ
5+
# ๊ณต๊ฐ„๋ณต์žก๋„: O(n) - Counter๋Š” ์ž…๋ ฅ ๋ฐฐ์—ด์— ์žˆ๋Š” ๊ฐ ๊ณ ์œ  ์›์†Œ๋ฅผ ํ‚ค๋กœ ์ €์žฅํ•˜๋ฏ€๋กœ ์ตœ์•…์˜ ๊ฒฝ์šฐ n๊ฐœ์˜ ํ‚ค๋ฅผ ์ €์žฅํ•จ
6+
def containsDuplicate(self, nums: List[int]) -> bool:
7+
cnt = Counter(nums)
8+
for _, v in cnt.items():
9+
if v >= 2:
10+
return True
11+
else:
12+
return False

โ€Žhouse-robber/hu6r1s.pyโ€Ž

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
class Solution:
2+
"""
3+
- ์ด์ „ ํ’€์ด
4+
[1,2,3,1]
5+
์ธ๋ฑ์Šค 0์—์„œ ํ›”์ณค์„ ๋•Œ, ์ธ๋ฑ์Šค 1์€ ํ›”์น˜๋ฉด ์•ˆ๋˜๋ฏ€๋กœ nums[0] + F(nums[2:])
6+
์ธ๋ฑ์Šค 0์—์„œ ์•ˆํ›”์ณค์„ ๋•Œ, ์ธ๋ฑ์Šค 1์—์„œ ํ›”์ณ์•ผ ํ•˜๋ฏ€๋กœ F(nums[1:])
7+
8+
F[nums] = max(nums[0] + F[nums[2:]], F(nums[1:]))
9+
F[i] = max(nums[i] + F(i+2), F(i+1))
10+
11+
12+
- dp
13+
nums = [1, 2, 3, 1]
14+
์ง‘์ด ํ•˜๋‚˜์ผ ๋•Œ๋Š” ํ•œ ๊ณณ๋งŒ ๋ณผ ์ˆ˜ ์žˆ์œผ๋‹ˆ ๊ทธ ์ง‘์˜ ๋ˆ์„ ํ›”์นจ: dp[0] = nums[0] = 1
15+
์ง‘์ด ๋‘ ๊ฐœ์ผ ๋•Œ, ์ธ๋ฑ์Šค 0์ธ ๊ณณ์„ ๊ฐ”๋‹ค๋ฉด dp[0]์ด ๊ฐ€์žฅ ํฌ๊ณ ,
16+
๊ฐ€์ง€ ์•Š์•˜๋‹ค๋ฉด ์ธ๋ฑ์Šค 1์„ ๊ฐ€๊ฒŒ ๋จ. dp[1] = max(dp[0], nums[1]) = max(1, 2) = 2
17+
๊ทธ๋ž˜์„œ ์ธ๋ฑ์Šค 0์„ ๊ฐ”์„ ๋•Œ์™€ ๊ฐ€์ง€ ์•Š์•˜์„ ๋•Œ๋ฅผ ๊ณ ๋ คํ•˜์—ฌ ํฐ ๋ˆ์„ ๊ฐ€์ ธ์˜ด
18+
์ง‘์ด ์„ธ ๊ฐœ์ผ ๋•Œ, ์ธ๋ฑ์Šค 0์„ ๊ฐ”๋‹ค๋ฉด ์ธ๋ฑ์Šค 2๋ฅผ ๊ฐ€์•ผํ•˜๊ณ , ์ธ๋ฑ์Šค 0์„ ๊ฐ€์ง€ ์•Š์•˜๋‹ค๋ฉด ์ธ๋ฑ์Šค 1์„ ๊ฐ
19+
์ด๋ฅผ ๊ณ ๋ คํ•˜๋ฉด, ์ธ๋ฑ์Šค 0์„ ๊ฐ”์„ ๋•Œ์˜ ๊ฐ€์žฅ ํฐ ๊ฐ’์ด dp[0]์ด๊ณ , ์ธ๋ฑ์Šค 2๋ฅผ ๊ฐ€์•ผํ•˜๋‹ˆ nums[2]๋ฅผ ๋”ํ•œ ๊ฐ’๊ณผ
20+
์ธ๋ฑ์Šค 0์— ๊ฐ€์ง€ ์•Š๊ณ  ์ธ๋ฑ์Šค 1๋กœ ๊ฐ”๋‹ค๋ฉด dp[1]์ด ๊ฐ€์žฅ ํฌ๋‹ค.
21+
๊ทธ๋ž˜์„œ dp[2] = max(dp[0] + nums[2], dp[1])
22+
์ง‘์ด ๋„ค ๊ฐœ์ผ ๋•Œ, ์ธ๋ฑ์Šค 3์„ ๊ฐ„๋‹ค๋ฉด ์ธ๋ฑ์Šค 1์„ ๊ฐ€๊ฒŒ ๋˜๋ฏ€๋กœ ์ธ๋ฑ์Šค 1๊นŒ์ง€์˜ dp ๊ฐ’๊ณผ ์ธ๋ฑ์Šค 3์˜ ๊ฐ’์„ ๋”ํ•œ ๊ฐ’๊ณผ
23+
์ธ๋ฑ์Šค 3์„ ๊ฐ€์ง€ ์•Š๋Š”๋‹ค๋ฉด ์ธ๋ฑ์Šค 0๊ณผ ์ธ๋ฑ์Šค 2๋ฅผ ๊ฐ€๊ฒŒ ๋œ๋‹ค.
24+
๊ทธ๋ ‡๋‹ค๋ฉด ์ธ๋ฑ์Šค 2๊นŒ์ง€์˜ ๊ฐ’์„ ๋น„๊ตํ•˜์—ฌ ๋” ํฐ ๋ˆ์„ ๊ฐ€์ ธ๊ฐ„๋‹ค.
25+
๊ทธ๋ž˜์„œ dp[3] = max(dp[1] + nums[3], dp[2])๊ฐ€ ๋œ๋‹ค.
26+
27+
- TC
28+
- for loop -> O(n)
29+
- SC
30+
- dp ํ…Œ์ด๋ธ” ํฌ๊ธฐ -> O(n)
31+
"""
32+
def rob(self, nums: List[int]) -> int:
33+
if not nums:
34+
return 0
35+
if len(nums) == 1:
36+
return nums[0]
37+
38+
dp = [0] * len(nums)
39+
dp[0] = nums[0]
40+
dp[1] = max(dp[0], nums[1])
41+
42+
for i in range(2, len(nums)):
43+
dp[i] = max(dp[i-2] + nums[i], dp[i-1])
44+
45+
return dp[-1]
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
class Solution:
2+
"""
3+
nums๋ฅผ ๋‚ด๋ฆผ์ฐจ์ˆœ sortํ•˜๊ณ , ์ฐจ๋ก€๋Œ€๋กœ ๋‘ ๊ฐœ์˜ ์ฐจ๊ฐ€ ๋‹ค์Œ ์ฐจ๊ฐ€ ๊ฐ™๋‹ค๋ฉด + 1
4+
์ฒ˜์Œ ์ฐจ๋Š” diff ๋ณ€์ˆ˜์— ์ €์žฅํ•˜๊ณ , ์ง„ํ–‰๋˜๋ฉด์„œ diff๋ฅผ ์—…๋ฐ์ดํŠธ
5+
200, 100, 4, 3, 2, 1
6+
7+
์—ฐ์†๋œ ์ˆ˜์—ด์ด๋ผ๊ณ  ํ•˜์—ฌ 1 ์ด์™ธ์˜ ๋‹ค๋ฅธ ์ˆ˜๊ฐ€ ์˜ฌ ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋ผ๊ณ  ํŒ๋‹จํ•˜์˜€์ง€๋งŒ ์ฐจ์ด๊ฐ€ 1๋กœ ๋‚˜์˜จ๋‹ค๋Š” ๊ฒƒ์„ ํ™•์ธ
8+
9+
- TC
10+
- set(nums) -> O(n)
11+
- for -> O(n)
12+
- while -> O(n)
13+
- ์ „์ฒด -> O(n)
14+
- SC
15+
- num_set -> O(n)
16+
- ๋‹ค๋ฅธ ๋ณ€์ˆ˜๋“ค -> O(1)
17+
- ์ „์ฒด -> O(n)
18+
"""
19+
def longestConsecutive(self, nums: List[int]) -> int:
20+
num_set = set(nums)
21+
longest = 0
22+
23+
for num in num_set:
24+
if num - 1 not in num_set:
25+
k = 1
26+
27+
while num + k in num_set:
28+
k += 1
29+
30+
longest = max(longest, k)
31+
return longest
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
from collections import Counter
2+
3+
class Solution:
4+
"""
5+
- TC
6+
- Counter(nums): O(n)
7+
- sorted(): O(n log n)
8+
- ์Šฌ๋ผ์ด์‹ฑ ๋ฐ ๋ฆฌ์ŠคํŠธ ๋ณ€ํ™˜: O(k)
9+
- ์ „์ฒด: O(n log n)
10+
- SP
11+
- Counter ๋ฐ ์ •๋ ฌ๋œ ๋”•์…”๋„ˆ๋ฆฌ ์ €์žฅ: O(n)
12+
- ๋ฐ˜ํ™˜ ๋ฆฌ์ŠคํŠธ: O(k)
13+
- ์ „์ฒด: O(n)
14+
"""
15+
def topKFrequent(self, nums: List[int], k: int) -> List[int]:
16+
count_nums = Counter(nums)
17+
count_nums = dict(sorted(count_nums.items(), reverse=True, key=lambda x: x[1])).keys()
18+
return list(count_nums)[:k]

โ€Žtwo-sum/hu6r1s.pyโ€Ž

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
"""
2+
- Time Complexity
3+
- ๋ฐ”๊นฅ for ๋ฃจํ”„๋Š” n - 1๋ฒˆ, ์•ˆ์ชฝ ๋ฃจํ”„๋Š” ์ตœ๋Œ€ n - i - 1๋ฒˆ ์‹คํ–‰
4+
- ์ „์ฒด์ ์œผ๋กœ O(n^2)์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๋ฅผ ๊ฐ€์ง์ง
5+
6+
- Space Complexity
7+
- ๋ณ„๋„์˜ ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์Œ
8+
- ๋ณ€์ˆ˜ i, j ๊ทธ๋ฆฌ๊ณ  ๋ฆฌํ„ด ์‹œ ์‚ฌ์šฉํ•˜๋Š” [i, j]๋งŒ ์กด์žฌ
9+
- ๋”ฐ๋ผ์„œ O(1)์˜ ๊ณต๊ฐ„ ๋ณต์žก๋„๋ฅผ ๊ฐ€์ง์ง
10+
"""
11+
"""
12+
class Solution:
13+
def twoSum(self, nums: List[int], target: int) -> List[int]:
14+
for i in range(len(nums)-1):
15+
for j in range(i+1, len(nums)):
16+
if nums[i] + nums[j] == target:
17+
return [i, j]
18+
"""
19+
20+
class Solution:
21+
def twoSum(self, nums: List[int], target: int) -> List[int]:
22+
d = {num: idx for idx, num in enumerate(nums)}
23+
24+
for i, v in enumerate(nums):
25+
idx = target - v
26+
if idx in d and d[idx] != i:
27+
return [i, d[idx]]

0 commit comments

Comments
ย (0)