Skip to content

Commit 166dad2

Browse files
authored
Merge pull request #2141 from socow/main
[socow] WEEK 04 solutions
2 parents 2207441 + 365c8e4 commit 166dad2

File tree

2 files changed

+81
-0
lines changed

2 files changed

+81
-0
lines changed
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
2+
class Solution:
3+
def maxDepth(self, root: Optional['TreeNode']) -> int:
4+
"""
5+
๋ฌธ์ œ
6+
- ์ด์ง„ํŠธ๋ฆฌ์˜ ์ตœ๋Œ€ ๊นŠ์ด๋ฅผ ๊ตฌํ•˜๋ผ.
7+
8+
์•„์ด๋””์–ด (์žฌ๊ท€ DFS)
9+
- ๊ณต์ง‘ํ•ฉ(None)์˜ ๊นŠ์ด๋Š” 0
10+
- ํ˜„์žฌ ๋…ธ๋“œ ๊นŠ์ด = max(์™ผ์ชฝ ์„œ๋ธŒํŠธ๋ฆฌ ๊นŠ์ด, ์˜ค๋ฅธ์ชฝ ์„œ๋ธŒํŠธ๋ฆฌ ๊นŠ์ด) + 1
11+
12+
์‹œ๊ฐ„๋ณต์žก๋„: O(n) โ€” ๊ฐ ๋…ธ๋“œ๋ฅผ ํ•œ ๋ฒˆ์”ฉ ๋ฐฉ๋ฌธ
13+
๊ณต๊ฐ„๋ณต์žก๋„: O(h) โ€” ์žฌ๊ท€ ์Šคํƒ(h๋Š” ํŠธ๋ฆฌ ๋†’์ด; ์ตœ์•… O(n), ํ‰๊ท  O(log n))
14+
"""
15+
# 1) ๋นˆ ํŠธ๋ฆฌ์ด๋ฉด ๊นŠ์ด 0
16+
if not root:
17+
return 0
18+
19+
# 2) ์™ผ์ชฝ/์˜ค๋ฅธ์ชฝ ์„œ๋ธŒํŠธ๋ฆฌ์˜ ์ตœ๋Œ€ ๊นŠ์ด๋ฅผ ๊ตฌํ•œ๋‹ค
20+
left_depth = self.maxDepth(root.left)
21+
right_depth = self.maxDepth(root.right)
22+
23+
# 3) ํ˜„์žฌ ๋…ธ๋“œ์˜ ๊นŠ์ด = ๋” ํฐ ์„œ๋ธŒํŠธ๋ฆฌ ๊นŠ์ด + 1(ํ˜„์žฌ ๋…ธ๋“œ ํฌํ•จ)
24+
return max(left_depth, right_depth) + 1
25+
# dfs(3) - ์™ผ์ชฝ์œผ๋กœ ์ด๋™
26+
# dfs(9) - ์™ผ์ชฝ์œผ๋กœ ์ด๋™
27+
# dfs(None) -> 0
28+
# dfs(9) - ์˜ค๋ฅธ์ชฝ์œผ๋กœ ์ด๋™
29+
# dfs(None) -> 0
30+
# dfs(9) ๋ฐ˜ํ™˜: max(0,0)+1 = 1
31+
# dfs(3) - ์˜ค๋ฅธ์ชฝ์œผ๋กœ ์ด๋™
32+
# dfs(20) - ์™ผ์ชฝ์œผ๋กœ ์ด๋™
33+
# dfs(15) - ์™ผ์ชฝ์œผ๋กœ ์ด๋™
34+
# dfs(None) -> 0
35+
# dfs(15) - ์˜ค๋ฅธ์ชฝ์œผ๋กœ ์ด๋™
36+
# dfs(None) -> 0
37+
# dfs(15) ๋ฐ˜ํ™˜: max(0,0)+1 = 1
38+
# dfs(20) - ์˜ค๋ฅธ์ชฝ์œผ๋กœ ์ด๋™
39+
# dfs(7) - ์™ผ์ชฝ์œผ๋กœ ์ด๋™
40+
# dfs(None) -> 0
41+
# dfs(7) - ์˜ค๋ฅธ์ชฝ์œผ๋กœ ์ด๋™
42+
# dfs(None) -> 0
43+
# dfs(7) ๋ฐ˜ํ™˜: max(0,0)+1 = 1
44+
# dfs(20) ๋ฐ˜ํ™˜: max(1,1)+1 = 2
45+
# dfs(3) ๋ฐ˜ํ™˜: max(1,2)+1 = 3
46+
# ์ตœ์ข… ๊ฒฐ๊ณผ: 3
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
"""
2+
๋ฌธ์ œ ์š”์•ฝ
3+
- ์ •๋ ฌ๋œ ๋‘ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ๋ฅผ ํ•˜๋‚˜์˜ ์ •๋ ฌ๋œ ๋ฆฌ์ŠคํŠธ๋กœ ๋ณ‘ํ•ฉ
4+
5+
์•„์ด๋””์–ด
6+
- dummy ๋…ธ๋“œ๋กœ ์‹œ์ž‘์  ๊ณ ์ •
7+
- ๋‘ ๋ฆฌ์ŠคํŠธ ๋น„๊ตํ•˜๋ฉฐ ์ž‘์€ ๊ฐ’์„ ์—ฐ๊ฒฐ
8+
- ๋‚จ์€ ๋ฆฌ์ŠคํŠธ ํ•œ๋ฒˆ์— ์—ฐ๊ฒฐ
9+
10+
์‹œ๊ฐ„๋ณต์žก๋„: O(n + m) - ๋‘ ๋ฆฌ์ŠคํŠธ ๊ธธ์ด์˜ ํ•ฉ
11+
๊ณต๊ฐ„๋ณต์žก๋„: O(1) - ์ถ”๊ฐ€ ๊ณต๊ฐ„ ์—†์ด ํฌ์ธํ„ฐ๋งŒ ๋ณ€๊ฒฝ
12+
"""
13+
14+
15+
class Solution:
16+
def mergeTwoLists(
17+
self, list1: Optional[ListNode], list2: Optional[ListNode]
18+
) -> Optional[ListNode]:
19+
dummy = ListNode() # ๊ฐ€์งœ ์‹œ์ž‘ ๋…ธ๋“œ
20+
node = dummy
21+
22+
# ๋‘ ๋ฆฌ์ŠคํŠธ ๋น„๊ตํ•˜๋ฉฐ ๋ณ‘ํ•ฉ
23+
while list1 and list2:
24+
if list1.val < list2.val:
25+
node.next = list1
26+
list1 = list1.next
27+
else:
28+
node.next = list2
29+
list2 = list2.next
30+
node = node.next
31+
32+
# ๋‚จ์€ ๋ฆฌ์ŠคํŠธ ์—ฐ๊ฒฐ
33+
node.next = list1 or list2
34+
35+
return dummy.next

0 commit comments

Comments
ย (0)