Skip to content

Commit ef6bd30

Browse files
authored
Merge pull request #543 from mangodm-web/main
[mangodm-web] Week10 Solutions
2 parents f6c5877 + 4448abc commit ef6bd30

File tree

3 files changed

+106
-0
lines changed

3 files changed

+106
-0
lines changed

โ€Žcourse-schedule/mangodm-web.py

+43
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
from typing import List
2+
3+
4+
class Solution:
5+
def canFinish(self, numCourses: int, prerequisites: List[List[int]]) -> bool:
6+
"""
7+
- Idea: ๊ฐ ๊ณผ๋ชฉ์˜ ์„ ํ–‰ ๊ณผ๋ชฉ์— ์‚ฌ์ดํด์ด ์กด์žฌํ•˜๋Š”์ง€ DFS๋กœ ํƒ์ƒ‰ํ•œ๋‹ค.
8+
ํ•˜๋‚˜๋ผ๋„ ์‚ฌ์ดํด์ด ์กด์žฌํ•œ๋‹ค๋ฉด, ๋ชจ๋“  ๊ณผ๋ชฉ์„ ์ˆ˜๊ฐ•ํ•  ์ˆ˜ ์—†๋‹ค๋Š” ์˜๋ฏธ๋‹ค.
9+
- Time Complexity: O(v + e). v์™€ e๋Š” ๊ฐ๊ฐ ๊ณผ๋ชฉ์˜ ์ˆ˜, e๋Š” ์„ ํ–‰ ๊ด€๊ณ„(๊ณผ๋ชฉ => ์„ ํ–‰ ๊ณผ๋ชฉ)์˜ ์ˆ˜๋‹ค.
10+
๋ชจ๋“  ๊ณผ๋ชฉ๊ณผ ๊ทธ ๊ณผ๋ชฉ์˜ ์„ ํ–‰ ๊ณผ๋ชฉ์„ ํƒ์ƒ‰ํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ ๋…ธ๋“œ์™€ ์—ฃ์ง€์— ๋Œ€ํ•ด ํ•œ๋ฒˆ์”ฉ ๋ฐฉ๋ฌธํ•ด์•ผ ํ•œ๋‹ค.
11+
- Space Complexity: O(v + e). v์™€ e๋Š” ๊ฐ๊ฐ ๊ณผ๋ชฉ์˜ ์ˆ˜, e๋Š” ์„ ํ–‰ ๊ด€๊ณ„์˜ ์ˆ˜๋‹ค.
12+
๊ฐ ๊ณผ๋ชฉ์˜ ๋ฐฉ๋ฌธ ์—ฌ๋ถ€๋ฅผ ๊ธฐ๋กํ•˜๊ธฐ ์œ„ํ•ด O(v) ๊ณต๊ฐ„์ด ํ•„์š”ํ•˜๊ณ ,
13+
๊ณผ๋ชฉ ๊ฐ„ ์„ ํ–‰ ๊ด€๊ณ„๋ฅผ ์ €์žฅํ•˜๋Š” ์ธ์ ‘ ๋ฆฌ์ŠคํŠธ๋Š” O(e)์˜ ๊ณต๊ฐ„์„ ์ฐจ์ง€ํ•œ๋‹ค.
14+
"""
15+
16+
graph = {i: [] for i in range(numCourses)}
17+
18+
for course, prerequisite in prerequisites:
19+
graph[course].append(prerequisite)
20+
21+
visited = set()
22+
23+
def DFS(course):
24+
if course in visited:
25+
return False
26+
if graph[course] == []:
27+
return True
28+
29+
visited.add(course)
30+
for prerequisite in graph[course]:
31+
if not DFS(prerequisite):
32+
return False
33+
34+
visited.remove(course)
35+
graph[course] = []
36+
37+
return True
38+
39+
for course in range(numCourses):
40+
if not DFS(course):
41+
return False
42+
43+
return True

โ€Žinvert-binary-tree/mangodm-web.py

+29
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
from typing import Optional
2+
3+
4+
class TreeNode:
5+
def __init__(self, val=0, left=None, right=None):
6+
self.val = val
7+
self.left = left
8+
self.right = right
9+
10+
11+
class Solution:
12+
"""
13+
- Idea: ์žฌ๊ท€๋ฅผ ์ด์šฉํ•˜์—ฌ ๊ฐ ๋…ธ๋“œ์˜ ์™ผ์ชฝ ์ž์‹๊ณผ ์˜ค๋ฅธ์ชฝ ์ž์‹์„ ๋ฐ”๊พผ๋‹ค.
14+
- Time Complexity: O(n). n์€ ์ „์ฒด ๋…ธ๋“œ์˜ ์ˆ˜๋‹ค.
15+
๋ชจ๋“  ๋…ธ๋“œ์— ๋Œ€ํ•ด์„œ ๋ฐ˜๋ณต์ ์œผ๋กœ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— O(n) ์‹œ๊ฐ„์ด ๊ฑธ๋ฆฐ๋‹ค.
16+
- Space Complexity: O(n). n์€ ์ „์ฒด ๋…ธ๋“œ์˜ ์ˆ˜๋‹ค.
17+
์ตœ์•…์˜ ๊ฒฝ์šฐ, ๋ถˆ๊ท ํ˜• ํŠธ๋ฆฌ์—์„œ๋Š” ์žฌ๊ท€ ํ˜ธ์ถœ๋กœ ์ธํ•ด ์ตœ๋Œ€ O(n) ์Šคํƒ ๊ณต๊ฐ„์ด ํ•„์š”ํ•˜๋‹ค.
18+
"""
19+
20+
def invertTree(self, root: Optional[TreeNode]) -> Optional[TreeNode]:
21+
if root is None:
22+
return
23+
24+
root.left, root.right = root.right, root.left
25+
26+
self.invertTree(root.left)
27+
self.invertTree(root.right)
28+
29+
return root
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
from typing import List
2+
3+
4+
class Solution:
5+
"""
6+
- ์•„์ด๋””์–ด: ๋ฐฐ์—ด์˜ ์ค‘๊ฐ„ ๊ฐ’์„ ๊ธฐ์ค€์œผ๋กœ ์™ผ์ชฝ, ์˜ค๋ฅธ์ชฝ ์ค‘ ํ•œ์ชฝ์€ ํ•ญ์ƒ ์ •๋ ฌ๋˜์–ด ์žˆ๋‹ค.
7+
์ด ํŠน์ง•์— ์ฐฉ์•ˆํ•˜์—ฌ, ์–ด๋А ์ชฝ์ด ๋จผ์ € ์ •๋ ฌ๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๊ณ , ๊ทธ ์•ˆ์—
8+
์ฐพ์œผ๋ ค๋Š” ๊ฐ’์ด ์žˆ๋Š”์ง€๋ฅผ ํ™•์ธํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ํƒ์ƒ‰ ๋ฒ”์œ„๋ฅผ ์ขํ˜€๊ฐ„๋‹ค.
9+
- ์‹œ๊ฐ„ ๋ณต์žก๋„: O(logn). n์€ ๋ฐฐ์—ด์˜ ๊ธธ์ด.
10+
๋ฐฐ์—ด์„ ์ ˆ๋ฐ˜์”ฉ ๋‚˜๋ˆ„์–ด ํƒ์ƒ‰์„ ์ง„ํ–‰ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” O(logn)์ด๋‹ค.
11+
- ๊ณต๊ฐ„ ๋ณต์žก๋„: O(1). ์ถ”๊ฐ€์ ์ธ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ , ์ƒ์ˆ˜ ๊ณต๊ฐ„๋งŒ ํ•„์š”ํ•˜๋‹ค.
12+
"""
13+
14+
def search(self, nums: List[int], target: int) -> int:
15+
left, right = 0, len(nums) - 1
16+
17+
while left <= right:
18+
mid = (left + right) // 2
19+
20+
if nums[mid] == target:
21+
return mid
22+
23+
if nums[left] <= nums[mid]:
24+
if nums[left] <= target < nums[mid]:
25+
right = mid - 1
26+
else:
27+
left = mid + 1
28+
else:
29+
if nums[mid] < target <= nums[right]:
30+
left = mid + 1
31+
else:
32+
right = mid - 1
33+
34+
return -1

0 commit comments

Comments
ย (0)