Skip to content

Commit fcbafc3

Browse files
Merge pull request #2362 from riveroverflows/main
[riveroverflows] WEEK 01 Solutions
2 parents 200df20 + b9bb77a commit fcbafc3

File tree

4 files changed

+147
-0
lines changed

4 files changed

+147
-0
lines changed
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
from typing import List
2+
3+
4+
class Solution:
5+
"""
6+
ํ’€์ด:
7+
- nums๋ฅผ set์œผ๋กœ ๋ณ€ํ™˜ํ•˜๋ฉด ์ค‘๋ณต์ด ์ œ๊ฑฐ๋œ๋‹ค.
8+
- set์˜ ๊ธธ์ด์™€ ์›๋ณธ ๋ฆฌ์ŠคํŠธ์˜ ๊ธธ์ด๊ฐ€ ๋‹ค๋ฅด๋ฉด ์ค‘๋ณต์ด ์กด์žฌํ•œ๋‹ค๋Š” ๋œป.
9+
10+
TC: O(n)
11+
- set(nums): ๋ฆฌ์ŠคํŠธ์˜ ๋ชจ๋“  ์›์†Œ๋ฅผ ์ˆœํšŒํ•˜๋ฉด์„œ set์— ์‚ฝ์ž…. O(n)
12+
- set ์‚ฝ์ž…์€ ํ•ด์‹œ ๊ธฐ๋ฐ˜์ด๋ผ ํ‰๊ท  O(1), n๊ฐœ ์›์†Œ๋‹ˆ๊นŒ O(n)
13+
- len(set(nums)): set์˜ ๊ธธ์ด ์กฐํšŒ. O(1)
14+
- len(nums): ๋ฆฌ์ŠคํŠธ์˜ ๊ธธ์ด ์กฐํšŒ. O(1)
15+
- ์ข…ํ•ฉ: O(n) + O(1) + O(1) = O(n)
16+
17+
SC: O(n)
18+
- set(nums): ์ค‘๋ณต์ด ์—†๋Š” ๊ฒฝ์šฐ ์ตœ๋Œ€ n๊ฐœ์˜ ์›์†Œ๋ฅผ ์ €์žฅ. O(n)
19+
- ๊ทธ ์™ธ ๋ณ€์ˆ˜ ์—†์Œ
20+
"""
21+
def containsDuplicate(self, nums: List[int]) -> bool:
22+
return len(set(nums)) != len(nums)
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
from typing import List
2+
3+
4+
class Solution:
5+
"""
6+
TC: O(n), SC: O(n)
7+
8+
n์€ nums ๋ฆฌ์ŠคํŠธ์˜ ๊ธธ์ด.
9+
10+
ํ’€์ด๊ณผ์ •:
11+
- nums๋ฅผ set์œผ๋กœ ๋งŒ๋“œ๋Š” ๊ฒƒ๊นŒ์ง„ ์•Œ๊ฒ ๋Š”๋ฐ ์ดํ›„๋กœ ํ’€์ด๊ฐ€ ์ด์–ด์ง€์ง€ ์•Š์•˜์Œ
12+
- ์—ฌ๋Ÿฌ ํ’€์ด ๋ฐฉ๋ฒ•์„ ์‹œ๋„ํ•ด๋ณด๋‹ค๊ฐ€ ๋„์ €ํžˆ ์ƒ๊ฐ๋‚˜์ง€ ์•Š์•„์„œ LeetSub ํ”Œ๋Ÿฌ๊ทธ์ธ ํžŒํŠธ 4/5๊นŒ์ง€ ๋ด„
13+
- "num - 1์ด set์— ์—†๋‹ค๋ฉด sequence์˜ ์‹œ์ž‘ ์ˆซ์ž์ผ ์ˆ˜ ์žˆ๋‹ค"์—์„œ ํžŒํŠธ๋ฅผ ์–ป์–ด์„œ ํ’€๊ฒŒ ๋จ
14+
15+
ํ’€์ด:
16+
- set์— ๋„ฃ์–ด์„œ O(1) ์กฐํšŒํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•จ
17+
- set์— num-1 ๊ฐ’์ด ์žˆ๋‹ค๋ฉด num์€ sequence์˜ ์‹œ์ž‘ ์ˆซ์ž๊ฐ€ ์•„๋‹ˆ๋ฏ€๋กœ skip
18+
- ์‹œ์ž‘ ์ˆซ์ž์—์„œ cnt(+1, +2, +3, ...)๋ฅผ ๋”ํ•ด๊ฐ€๋ฉฐ set์— ์žˆ๋Š”์ง€ ํ™•์ธ
19+
- answer์™€ cnt ์ค‘ ๋” ํฐ ๊ฐ’์„ answer์— ์ €์žฅ
20+
21+
TC:
22+
- set(nums): n๊ฐœ ์›์†Œ ์‚ฝ์ž…. O(n).
23+
- for num in nums_set: set ์ „์ฒด ์ˆœํšŒ. O(n).
24+
- if num - 1 in nums_set: ํ•ด์‹œ ๊ธฐ๋ฐ˜ ์กฐํšŒ. O(1).
25+
- while: ์‹œ์ž‘ ์ˆซ์ž์—์„œ๋งŒ ์‹คํ–‰. for-while ์ค‘์ฒฉ์ด๋ผ O(nยฒ)์ฒ˜๋Ÿผ ๋ณด์ด์ง€๋งŒ,
26+
๊ฐ ์›์†Œ๋Š” while์—์„œ ์ตœ๋Œ€ 1๋ฒˆ๋งŒ ๋ฐฉ๋ฌธ๋จ. ์ „์ฒด while ๋ฐ˜๋ณต ํ•ฉ๊ณ„ = O(n).
27+
- ์ข…ํ•ฉ: O(n).
28+
29+
SC:
30+
- nums_set: ์ตœ์•… n๊ฐœ ์›์†Œ. O(n).
31+
- answer, cnt: ์ƒ์ˆ˜. O(1).
32+
- ์ข…ํ•ฉ: O(n).
33+
"""
34+
def longestConsecutive(self, nums: List[int]) -> int:
35+
nums_set = set(nums)
36+
answer = 0
37+
38+
for num in nums_set:
39+
if num - 1 in nums_set:
40+
continue
41+
cnt = 0
42+
while num + cnt in nums_set:
43+
cnt += 1
44+
answer = max(answer, cnt)
45+
46+
return answer
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
from typing import List
2+
3+
4+
class Solution:
5+
"""
6+
ํ’€์ด:
7+
- ๋นˆ๋„์ˆ˜ ์„ธ๊ธฐ + Bucket Sort๋ฅผ ์กฐํ•ฉํ•ด์„œ ์ •๋ ฌ ์—†์ด O(n)์— ์ƒ์œ„ k๊ฐœ๋ฅผ ๋ฝ‘๋Š”๋‹ค.
8+
- 1๋‹จ๊ณ„: nums๋ฅผ ์ˆœํšŒํ•˜๋ฉฐ ๊ฐ ์ˆซ์ž์˜ ๋“ฑ์žฅ ํšŸ์ˆ˜๋ฅผ dict๋กœ ์„ผ๋‹ค.
9+
- 2๋‹จ๊ณ„: ๋นˆ๋„์ˆ˜๋ฅผ ์ธ๋ฑ์Šค๋กœ ํ•˜๋Š” ๋ฒ„ํ‚ท ๋ฐฐ์—ด์„ ๋งŒ๋“ ๋‹ค.
10+
๋นˆ๋„์ˆ˜๋Š” ์ตœ๋Œ€ len(nums)์ด๋ฏ€๋กœ ๋ฐฐ์—ด ํฌ๊ธฐ๊ฐ€ ๊ณ ์ •๋จ.
11+
- 3๋‹จ๊ณ„: ๋ฒ„ํ‚ท ๋ฐฐ์—ด์„ ๋’ค์—์„œ๋ถ€ํ„ฐ(๋†’์€ ๋นˆ๋„์ˆ˜๋ถ€ํ„ฐ) ์ˆœํšŒํ•˜๋ฉฐ k๊ฐœ๋ฅผ ์ˆ˜์ง‘ํ•œ๋‹ค.
12+
- ์ •๋ ฌ(O(n log n)) ๋Œ€์‹  ๋ฒ„ํ‚ท์˜ ์ธ๋ฑ์Šค ์ž์ฒด๊ฐ€ ์ •๋ ฌ ์—ญํ• ์„ ํ•˜๋ฏ€๋กœ O(n).
13+
14+
TC: O(n)
15+
- ๋นˆ๋„์ˆ˜ ์„ธ๊ธฐ: nums๋ฅผ ํ•œ ๋ฒˆ ์ˆœํšŒ. O(n).
16+
- ๋ฒ„ํ‚ท ๋ฐฐ์—ด ์ƒ์„ฑ: ๊ณ ์œ  ์›์†Œ ์ˆ˜๋งŒํผ ์ˆœํšŒ. ์ตœ์•… O(n).
17+
- ์ƒ์œ„ k๊ฐœ ์ˆ˜์ง‘: ๋ฒ„ํ‚ท ๋ฐฐ์—ด์„ ๋’ค์—์„œ๋ถ€ํ„ฐ ์ˆœํšŒ. ์ตœ์•… O(n).
18+
- ์ข…ํ•ฉ: O(n).
19+
20+
SC: O(n)
21+
- counts(dict): ์ตœ์•… n๊ฐœ์˜ ๊ณ ์œ  ์›์†Œ. O(n).
22+
- bucket(list of lists): ํฌ๊ธฐ n+1. O(n).
23+
- answer(list): ์ตœ๋Œ€ k๊ฐœ. O(k) โ‰ค O(n).
24+
- ์ข…ํ•ฉ: O(n).
25+
"""
26+
def topKFrequent(self, nums: List[int], k: int) -> List[int]:
27+
counts = dict()
28+
for num in nums:
29+
if num not in counts:
30+
counts[num] = 0
31+
counts[num] += 1
32+
33+
bucket = [[] for _ in range(len(nums) + 1)]
34+
for num, cnt in counts.items():
35+
bucket[cnt].append(num)
36+
37+
answer = []
38+
for cnt_list in reversed(bucket):
39+
if not cnt_list:
40+
continue
41+
for num in cnt_list:
42+
answer.append(num)
43+
if len(answer) == k:
44+
return answer

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

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
from typing import List
2+
3+
4+
class Solution:
5+
"""
6+
ํ’€์ด:
7+
- ๋ฐฐ์—ด์„ ํ•œ ๋ฒˆ ์ˆœํšŒํ•˜๋ฉด์„œ, ๊ฐ ์ˆซ์ž์— ๋Œ€ํ•ด
8+
"๋‚˜์™€ ๋”ํ•ด์„œ target์ด ๋˜๋Š” ์ง(complement)"์ด
9+
์ด๋ฏธ ๋“ฑ์žฅํ–ˆ๋Š”์ง€๋ฅผ dict๋กœ ํ™•์ธํ•œ๋‹ค.
10+
- dict์— {์ˆซ์ž: ์ธ๋ฑ์Šค}๋ฅผ ์ €์žฅํ•ด๋‘๋ฉด, complement ์กฐํšŒ๊ฐ€ O(1)์ด๋ฏ€๋กœ ์ „์ฒด O(n).
11+
- complement๋ฅผ ๋จผ์ € ํ™•์ธํ•˜๊ณ , ๊ทธ ๋‹ค์Œ์— ํ˜„์žฌ ์ˆซ์ž๋ฅผ
12+
dict์— ๋„ฃ๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ™์€ ๊ฐ’์ด ๋‘ ๋ฒˆ ๋‚˜์˜ค๋Š” ๊ฒฝ์šฐ
13+
(์˜ˆ: [3,3], target=6)์—๋„ ์ •์ƒ ๋™์ž‘ํ•œ๋‹ค.
14+
15+
TC: O(n)
16+
- for ๋ฃจํ”„: nums์˜ ๋ชจ๋“  ์›์†Œ๋ฅผ ์ตœ๋Œ€ ํ•œ ๋ฒˆ ์ˆœํšŒ. O(n)
17+
- complement ๊ณ„์‚ฐ (target - num): O(1)
18+
- dict์—์„œ complement ์กด์žฌ ์—ฌ๋ถ€ ํ™•์ธ (in ์—ฐ์‚ฐ): ํ•ด์‹œ ๊ธฐ๋ฐ˜์ด๋ผ ํ‰๊ท  O(1)
19+
- dict์— ํ˜„์žฌ ์ˆซ์ž ์‚ฝ์ž…: ํ‰๊ท  O(1)
20+
- ์ตœ์•…์˜ ๊ฒฝ์šฐ(๋‹ต์ด ๋งˆ์ง€๋ง‰ ์Œ): n๋ฒˆ ๋ฐ˜๋ณต. ์ตœ์„ ์˜ ๊ฒฝ์šฐ(๋‹ต์ด ์ฒซ ๋‘ ์›์†Œ): 2๋ฒˆ ๋ฐ˜๋ณต
21+
22+
SC: O(n)
23+
- nummap(dict): ์ตœ์•…์˜ ๊ฒฝ์šฐ n-1๊ฐœ์˜ ์›์†Œ๋ฅผ ์ €์žฅ (๋งˆ์ง€๋ง‰ ์›์†Œ ์ง์ „๊นŒ์ง€ ๋‹ค ๋„ฃ์Œ). O(n)
24+
- complement, i, num: ์ž…๋ ฅ ํฌ๊ธฐ์™€ ๋ฌด๊ด€ํ•œ ์ƒ์ˆ˜. O(1)
25+
"""
26+
def twoSum(self, nums: List[int], target: int) -> List[int]:
27+
nummap = dict()
28+
29+
for i, num in enumerate(nums):
30+
complement = target - num
31+
32+
if complement in nummap:
33+
return [nummap[complement], i]
34+
35+
nummap[num] = i

0 commit comments

Comments
ย (0)