Skip to content

Commit b580e8f

Browse files
authored
Merge pull request #1699 from rara-record/main
[rara-record] WEEK 01 solutions
2 parents 89ea753 + 8897d04 commit b580e8f

File tree

4 files changed

+178
-0
lines changed

4 files changed

+178
-0
lines changed

โ€Žcontains-duplicate/rara-record.py

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
from typing import List
2+
3+
"""
4+
๋ฌธ์ œ ์„ค๋ช…:
5+
- ๋ฐฐ์—ด์— ์ค‘๋ณต๋œ ๊ฐ’์ด ํ•˜๋‚˜๋ผ๋„ ์žˆ์œผ๋ฉด True, ์•„๋‹ˆ๋ฉด False๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฌธ์ œ
6+
7+
๋ชฉํ‘œ
8+
- ๋ฐฐ์—ด์„ ์ˆœํšŒํ•˜๋ฉด์„œ ๊ฐ ๊ฐ’์„ set์— ์ถ”๊ฐ€
9+
- set์€ ์ค‘๋ณต์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ, ์ด๋ฏธ set์— ๊ฐ’์ด ์žˆ์œผ๋ฉด ์ค‘๋ณต์ด ๋ฐœ์ƒํ•œ ๊ฒƒ
10+
- ์ค‘๋ณต์ด ๋ฐœ๊ฒฌ๋˜๋ฉด true, ์—†์œผ๋ฉด false ๋ฐ˜ํ™˜
11+
12+
์‹œ๊ฐ„๋ณต์žก๋„: O(n)
13+
- ๋ฐฐ์—ด์„ ํ•œ ๋ฒˆ๋งŒ ์ˆœํšŒํ•˜๋ฏ€๋กœ O(n)
14+
15+
๊ณต๊ฐ„๋ณต์žก๋„: O(n)
16+
- set์— n๊ฐœ์˜ ๊ฐ’์ด ์ €์žฅ๋จ
17+
"""
18+
19+
class Solution:
20+
def containsDuplicate(self, nums: List[int]) -> bool:
21+
num_set = set()
22+
for num in nums:
23+
if num in num_set:
24+
return True
25+
else:
26+
num_set.add(num)
27+
return False
28+
29+
Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
from typing import List
2+
3+
"""
4+
๋ฌธ์ œ ์„ค๋ช…:
5+
์ •๋ ฌ๋˜์ง€ ์•Š์€ ์ •์ˆ˜ ๋ฐฐ์—ด์—์„œ ๊ฐ€์žฅ ๊ธด ์—ฐ์†๋œ ์ˆซ์ž ์ˆ˜์—ด์˜ ๊ธธ์ด๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฌธ์ œ
6+
O(n) ์‹œ๊ฐ„๋ณต์žก๋„๋กœ ํ•ด๊ฒฐํ•ด์•ผ ํ•จ => ์ •๋ ฌ x
7+
8+
๋ชฉํ‘œ:
9+
- ํ•ด์‹œ ์„ธํŠธ๋กœ ์ค‘๋ณต ์ œ๊ฑฐ
10+
- ์—ฐ์† ์ˆ˜์—ด์˜ ์‹œ์ž‘์  ์ฐพ๊ธฐ
11+
12+
[100,4,200,1,3,2]
13+
- ํ•ด์‹œ ์„ธํŠธ: {100, 4, 200, 1, 3, 2}
14+
- ์‹œ์ž‘์  ์ฐพ๊ธฐ: 1 (0์ด ์—†์Œ), 100 (99๊ฐ€ ์—†์Œ), 200 (199๊ฐ€ ์—†์Œ)
15+
- 1์—์„œ ์‹œ์ž‘: 1โ†’2โ†’3โ†’4 (๊ธธ์ด 4)
16+
- 100์—์„œ ์‹œ์ž‘: 100๋งŒ (๊ธธ์ด 1)
17+
- 200์—์„œ ์‹œ์ž‘: 200๋งŒ (๊ธธ์ด 1)
18+
- ์ตœ๋Œ€ ๊ธธ์ด: 4
19+
20+
- for num=1: 0์ด ์—†์œผ๋ฏ€๋กœ ์‹œ์ž‘์  โ†’ while์—์„œ 1,2,3,4 ์ฒ˜๋ฆฌ
21+
- for num=2: 1์ด ์žˆ์œผ๋ฏ€๋กœ while ์Šคํ‚ต
22+
- for num=3: 2๊ฐ€ ์žˆ์œผ๋ฏ€๋กœ while ์Šคํ‚ต
23+
- for num=4: 3์ด ์žˆ์œผ๋ฏ€๋กœ while ์Šคํ‚ต
24+
โ†’ ๊ฐ ์ˆซ์ž๊ฐ€ while์—์„œ 1๋ฒˆ๋งŒ
25+
"""
26+
27+
"""
28+
์‹œ๊ฐ„๋ณต์žก๋„: O(n)
29+
- set(nums) ๋ณ€ํ™˜: O(n)
30+
- ์™ธ๋ถ€ for ๋ฃจํ”„: O(n)๋ฒˆ ์‹คํ–‰
31+
- while ์ด ์‹คํ–‰ ํšŸ์ˆ˜: ์ „์ฒด ์•Œ๊ณ ๋ฆฌ์ฆ˜์—์„œ ๊ฐ ์ˆซ์ž๊ฐ€ while ์•ˆ์—์„œ ์ตœ๋Œ€ 1๋ฒˆ๋งŒ ์ฒ˜๋ฆฌ๋จ
32+
โ†’ ์ด while ๋‚ด๋ถ€ ์ž‘์—… = n๋ฒˆ โ†’ O(n)
33+
- ํ•ด์‹œ ์กฐํšŒ: O(1) ร— ์ด ์กฐํšŒ ํšŸ์ˆ˜
34+
- ์ „์ฒด: O(n) + O(n) + O(n) = O(n)
35+
36+
๊ณต๊ฐ„๋ณต์žก๋„: O(n)
37+
- num_set: ์ตœ๋Œ€ n๊ฐœ์˜ ์„œ๋กœ ๋‹ค๋ฅธ ์ˆซ์ž ์ €์žฅ -> O(n)
38+
- ๊ธฐํƒ€ ๋ณ€์ˆ˜๋“ค: O(1)
39+
- ์ „์ฒด: O(n)
40+
"""
41+
42+
class Solution:
43+
def longestConsecutive(self, nums: List[int]) -> int:
44+
num_set = set(nums)
45+
max_length = 0
46+
47+
48+
for num in num_set:
49+
50+
# ๋ฃจํ”„ ์•ˆ์—์„œ ํ•œ๋ฒˆ๋งŒ ์ฒ˜๋ฆฌ
51+
if num - 1 not in num_set:
52+
current_length = 1
53+
54+
while num + current_length in num_set:
55+
current_length += 1
56+
57+
max_length = max(max_length, current_length)
58+
59+
60+
return max_length
61+
62+
print(Solution().longestConsecutive([100, 4, 200, 1, 3, 2]))
63+
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
from typing import List
2+
from heapq import nlargest
3+
4+
"""
5+
๋ฌธ์ œ ์„ค๋ช…:
6+
์ด ๋ฌธ์ œ๋Š” ์ฃผ์–ด์ง„ k๋ฒˆ์งธ ๋งŒํผ ๋นˆ๋„์ˆ˜๊ฐ€ ๋†’์€ ๊ฐ’๋“ค์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฌธ์ œ
7+
๋นˆ๋„์ˆ˜ ์ฒดํฌ ํ›„, ๋ฐ˜ํ™˜ ๊ฐ’ ์ˆœ์„œ๋Š” ์ƒ๊ด€ ์—†๋‹ค๊ณ  ํ–ˆ์œผ๋‹ˆ heap ์‚ฌ์šฉ
8+
9+
{
10+
1: 3, # 1์ด 3๋ฒˆ ๋“ฑ์žฅ
11+
2: 2, # 2๊ฐ€ 2๋ฒˆ ๋“ฑ์žฅ
12+
3: 1, # 3์ด 1๋ฒˆ ๋“ฑ์žฅ
13+
}
14+
15+
๋นˆ๋„์ˆ˜ ๊ธฐ์ค€์œผ๋กœ k๋ฒˆ์งธ๋งŒํผ ํฐ ๊ฐ’์„ ๋ฐ˜ํ™˜
16+
"""
17+
18+
class Solution:
19+
def topKFrequent(self, nums: List[int], k: int) -> List[int]:
20+
count_dic = {}
21+
22+
for num in nums:
23+
if num in count_dic:
24+
count_dic[num] += 1
25+
else:
26+
count_dic[num] = 1
27+
28+
# ๋นˆ๋„์ˆ˜๊ฐ€ ํฐ ์ˆœ์„œ๋Œ€๋กœ k๊ฐœ๋ฅผ ๋ฐ˜ํ™˜
29+
return nlargest(k, count_dic, key=count_dic.get)
30+
31+
"""
32+
์‹œ๊ฐ„๋ณต์žก๋„: O(n log k)
33+
- ๋”•์…”๋„ˆ๋ฆฌ O(n) + heap์„ ์‚ฌ์šฉํ•ด์„œ k๋ฒˆ์งธ ์š”์†Œ๊นŒ์ง€ ๋ฐ˜ํ™˜ O(n log k) = O(n log k)
34+
35+
๊ณต๊ฐ„๋ณต์žก๋„: O(n)
36+
- ์ตœ๋Œ€ n๊ฐœ์˜ ์„œ๋กœ ๋‹ค๋ฅธ ์ˆซ์ž๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ๊ณ , O(n)
37+
- heap์€ ์ตœ๋Œ€ k๊ฐœ๋งŒ ์ €์žฅ -> O(k)
38+
์ „์ฒด์ ์œผ๋กœ O(n)
39+
"""
40+
41+
42+
43+

โ€Žtwo-sum/rara-record.py

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
from typing import List
2+
3+
"""
4+
๋ฌธ์ œ ์„ค๋ช…:
5+
nums์—์„œ ๋‘ ์ˆ˜๋ฅผ ๋”ํ•ด target์ด ๋˜๋Š” ๋‘ ์ธ๋ฑ์Šค๋ฅผ ์ฐพ์•„ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฌธ์ œ
6+
๊ฐ™์€ ์›์†Œ๋ฅผ ๋‘ ๋ฒˆ ์“ธ ์ˆ˜ ์—†์Œ
7+
์ฐพ์•ผ์•ผํ•˜๋Š” ๊ฐ’: taget - ํ˜„์žฌ ์ˆซ์ž = ๋”ํ•ด์„œ target์ด ๋˜๋Š” ๊ฐ’
8+
9+
nums = [2,7,11,15], target = 9
10+
{
11+
2: 0, (value: index)
12+
7: 1,
13+
11: 2,
14+
15: 3,
15+
}
16+
17+
1. nums๋ฅผ ํ•œ ๋ฒˆ ์ˆœํšŒํ•˜๋ฉฐ ๊ฐ ์ˆซ์ž์™€ ์ธ๋ฑ์Šค๋ฅผ ๋”•์…”๋„ˆ๋ฆฌ์— ์ €์žฅ
18+
2. ๋‹ค์‹œ nums๋ฅผ ์ˆœํšŒํ•˜๋ฉฐ, target - ํ˜„์žฌ ์ˆซ์ž๊ฐ€ ๋”•์…”๋„ˆ๋ฆฌ์— ์žˆ๊ณ  ์ธ๋ฑ์Šค๊ฐ€ ๋‹ค๋ฅด๋ฉด ์ •๋‹ต ์Œ์„ ๋ฐ˜ํ™˜
19+
"""
20+
21+
22+
class Solution:
23+
def twoSum(self, nums: List[int], target: int) -> List[int]:
24+
dic = {}
25+
26+
for key, value in enumerate(nums):
27+
dic[value] = key
28+
29+
# ๋‹ค์‹œ nums๋ฅผ ์ˆœํšŒ
30+
for key, value in enumerate(nums):
31+
match = target - value
32+
33+
# ๊ฐ™์€ ์›์†Œ๋ฅผ ๋‘๋ฒˆ ์“ธ ์ˆ˜ ์—†๋‹ค.
34+
if (match in dic) and key != dic[match]:
35+
return [key, dic[match]]
36+
37+
"""
38+
์‹œ๊ฐ„ ๋ณต์žก๋„: O(n)
39+
- ๋ฆฌ์ŠคํŠธ๋ฅผ ๋‘ ๋ฒˆ ์ˆœํšŒํ•˜์ง€๋งŒ ๊ฐ๊ฐ O(n)์ด ์†Œ์š”๋˜๋ฏ€๋กœ, ์ด ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” O(n)
40+
๊ณต๊ฐ„ ๋ณต์žก๋„: O(n)
41+
- ์ž…๋ ฅ ํฌ๊ธฐ๊ฐ€ n์ด๋ผ๋ฉด ๋”•์…”๋„ˆ๋ฆฌ์˜ ํฌ๊ธฐ๋„ ์ตœ๋Œ€ n
42+
"""
43+

0 commit comments

Comments
ย (0)