Skip to content

Commit 9bf35da

Browse files
authored
Merge pull request #556 from mangodm-web/main
[mangodm-web] Week11 Solutions
2 parents edca7a0 + 64cc659 commit 9bf35da

File tree

3 files changed

+107
-0
lines changed

3 files changed

+107
-0
lines changed

โ€Žgraph-valid-tree/mangodm-web.py

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
from typing import List
2+
3+
4+
class Solution:
5+
def validTree(self, n: int, edges: List[List[int]]) -> bool:
6+
"""
7+
- Idea: ์œ ํšจํ•œ ํŠธ๋ฆฌ๋ผ๋ฉด ๋งŒ์กฑํ•ด์•ผ ํ•˜๋Š” ์กฐ๊ฑด๋“ค์„ ํ™œ์šฉํ•˜์—ฌ ํŠธ๋ฆฌ ์—ฌ๋ถ€๋ฅผ ํŒ๋‹จํ•œ๋‹ค.
8+
- Time Complexity: O(v + e). v์™€ e๋Š” ๊ฐ๊ฐ ๋…ธ๋“œ์˜ ์ˆ˜, ์—ฐ๊ฒฐ๋œ ์„ (์—ฃ์ง€)์˜ ์ˆ˜
9+
์ธ์ ‘ ๋ฆฌ์ŠคํŠธ๋กœ ๋งŒ๋“  ๊ทธ๋ž˜ํ”„๋ฅผ ์ˆœํšŒํ•  ๋•Œ, ๋…ธ๋“œ๋งˆ๋‹ค ์—ฐ๊ฒฐ๋œ ์—ฃ์ง€๋ฅผ ๋”ฐ๋ผ๊ฐ€๋ฉฐ ํƒ์ƒ‰ํ•˜๋ฏ€๋กœ O(v + e)์ด ์†Œ์š”๋œ๋‹ค.
10+
- Space Complexity: O(v + e). v์™€ e๋Š” ๊ฐ๊ฐ ๋…ธ๋“œ์˜ ์ˆ˜, ์—ฃ์ง€์˜ ์ˆ˜
11+
๊ทธ๋ž˜ํ”„๋ฅผ ์ธ์ ‘ ๋ฆฌ์ŠคํŠธ๋กœ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•ด O(v + e)์˜ ๊ณต๊ฐ„์ด ํ•„์š”ํ•˜๋‹ค.
12+
13+
"""
14+
if len(edges) != n - 1:
15+
return False
16+
17+
graph = {i: [] for i in range(n)}
18+
19+
for v1, v2 in edges:
20+
graph[v1].append(v2)
21+
graph[v2].append(v1)
22+
23+
visited = set()
24+
25+
def DFS(v: int) -> None:
26+
visited.add(v)
27+
28+
for adj in graph[v]:
29+
if adj not in visited:
30+
DFS(adj)
31+
32+
DFS(0)
33+
34+
return len(visited) == n
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
from typing import Optional
2+
3+
4+
# Definition for a binary tree node.
5+
class TreeNode:
6+
def __init__(self, val=0, left=None, right=None):
7+
self.val = val
8+
self.left = left
9+
self.right = right
10+
11+
12+
class Solution:
13+
def maxDepth(self, root: Optional[TreeNode]) -> int:
14+
"""
15+
- Idea: ์ด์ง„ ํŠธ๋ฆฌ์˜ ์ตœ๋Œ€ ๊นŠ์ด๋Š” ํ˜„์žฌ ๋…ธ๋“œ์˜ ๊นŠ์ด(1)์™€ ํ•˜์œ„ ํŠธ๋ฆฌ์˜ ์ตœ๋Œ€ ๊นŠ์ด ์ค‘ ํฐ ๊ฐ’์„ ๋”ํ•œ ๊ฒƒ์œผ๋กœ ์ •์˜ํ•œ๋‹ค.
16+
- Time Complexity: O(n). n์€ ์ „์ฒด ๋…ธ๋“œ์˜ ์ˆ˜
17+
๋ชจ๋“  ๋…ธ๋“œ๋ฅผ ํ•œ๋ฒˆ์”ฉ ๋ฐฉ๋ฌธํ•˜์—ฌ ํƒ์ƒ‰ํ•˜๊ธฐ ๋•Œ๋ฌธ์— O(n)์ด ์†Œ์š”๋œ๋‹ค.
18+
- Space Complexity: O(n). n์€ ์ „์ฒด ๋…ธ๋“œ์˜ ์ˆ˜
19+
์žฌ๊ท€์ ์œผ๋กœ ํƒ์ƒ‰ํ•  ๋•Œ, ํ˜ธ์ถœ ์Šคํƒ์— ์Œ“์ด๋Š” ํ•จ์ˆ˜ ํ˜ธ์ถœ์˜ ์ˆ˜๋Š” ์ตœ๋Œ€ ํŠธ๋ฆฌ์˜ ๊นŠ์ด์™€ ๊ฐ™๋‹ค.
20+
ํŠธ๋ฆฌ๊ฐ€ ํŽธํ–ฅ๋˜์–ด ์žˆ๋Š” ์ตœ์•…์˜ ๊ฒฝ์šฐ, ๊นŠ์ด๊ฐ€ n์ด ๋  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— O(n)์œผ๋กœ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.
21+
"""
22+
if root is None:
23+
return 0
24+
25+
left_depth = self.maxDepth(root.left)
26+
right_depth = self.maxDepth(root.right)
27+
28+
return max(left_depth, right_depth) + 1

โ€Žreorder-list/mangodm-web.py

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
from typing import Optional
2+
3+
4+
# Definition for singly-linked list.
5+
class ListNode:
6+
def __init__(self, val=0, next=None):
7+
self.val = val
8+
self.next = next
9+
10+
11+
class Solution:
12+
def reorderList(self, head: Optional[ListNode]) -> None:
13+
"""
14+
- Idea:
15+
์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ๋ฅผ ๋ฐ˜์œผ๋กœ ๋‚˜๋ˆ„๊ณ , ๋’ค์ชฝ(๋‘๋ฒˆ์งธ ๋ฆฌ์ŠคํŠธ)์˜ ์—ฐ๊ฒฐ ๋ฐฉํ–ฅ์„ ๋ฐ˜๋Œ€๋กœ ๋’ค์ง‘๋Š”๋‹ค.
16+
์ฒซ๋ฒˆ์งธ ๋ฆฌ์ŠคํŠธ์™€ ๋‘๋ฒˆ์งธ ๋ฆฌ์ŠคํŠธ์˜ ๋…ธ๋“œ๋ฅผ ๋ฒˆ๊ฐˆ์•„๊ฐ€๋ฉฐ ์—ฐ๊ฒฐํ•œ๋‹ค.
17+
- Time Complexity: O(n). n์€ ์ „์ฒด ๋…ธ๋“œ์˜ ์ˆ˜
18+
๋ฆฌ์ŠคํŠธ๋ฅผ ํƒ์ƒ‰ํ•˜๊ณ  ๋ณ‘ํ•ฉํ•˜๋Š” ๋ฐ ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„์— ๋น„๋ก€ํ•œ๋‹ค.
19+
- Space Complexity: O(1)
20+
๋ช‡ ๊ฐœ์˜ ํฌ์ธํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ƒ์ˆ˜ ๊ณต๊ฐ„๋งŒ ์ฐจ์ง€ํ•œ๋‹ค.
21+
"""
22+
slow, fast = head, head
23+
24+
while fast and fast.next:
25+
slow = slow.next
26+
fast = fast.next.next
27+
28+
mid = slow.next
29+
slow.next = None
30+
31+
prev, cur = None, mid
32+
33+
while cur:
34+
next_temp = cur.next
35+
cur.next = prev
36+
prev = cur
37+
cur = next_temp
38+
39+
first, second = head, prev
40+
41+
while second:
42+
first_next, second_next = first.next, second.next
43+
first.next = second
44+
second.next = first_next
45+
first, second = first_next, second_next

0 commit comments

Comments
ย (0)