Skip to content

Commit ac2c3d5

Browse files
authored
Merge pull request DaleStudy#614 from mangodm-web/main
[mangodm-web] Week15 Solutions
2 parents 0991abb + 814dc18 commit ac2c3d5

File tree

3 files changed

+114
-0
lines changed

3 files changed

+114
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
class Solution:
2+
def is_palindrome(self, s: str) -> bool:
3+
return s == s[::-1]
4+
5+
def longestPalindrome(self, s: str) -> str:
6+
"""
7+
- Idea: ์•„๋ž˜์˜ ๋ฐฉ๋ฒ•์œผ๋กœ ์ฃผ์–ด์ง„ ๋ฌธ์ž์—ด์—์„œ ๊ฐ€์žฅ ๊ธด ํŒฐ๋ฆฐ๋“œ๋กฌ์„ ์ฐพ๋Š”๋‹ค.
8+
1. ๋ชจ๋“  ๊ฐ€๋Šฅํ•œ ๋ถ€๋ถ„ ๋ฌธ์ž์—ด ์ƒ์„ฑ
9+
2. ๊ฐ ๋ถ€๋ถ„ ๋ฌธ์ž์—ด์ด ํŒฐ๋ฆฐ๋“œ๋กฌ์ธ์ง€ ํ™•์ธ
10+
3. ๊ฐ€์žฅ ๊ธด ํŒฐ๋ฆฐ๋“œ๋กฌ์„ ์ €์žฅํ•˜๊ณ  ๋ฐ˜ํ™˜
11+
- Time Complexity: O(n^3). n์€ ๋ฌธ์ž์—ด์˜ ๊ธธ์ด
12+
๋ชจ๋“  ๋ถ€๋ถ„ ๋ฌธ์ž์—ด์„ ๊ตฌํ•˜๋Š”๋ฐ O(n^2), ๊ฐ ๋ถ€๋ถ„ ๋ฌธ์ž์—ด์ด ํŒฐ๋ฆฐ๋“œ๋กฌ์ธ์ง€ ์•Œ์•„๋‚ด๋Š”๋ฐ O(n).
13+
๊ฒฐ๊ตญ O(n^3)์˜ ์‹œ๊ฐ„์ด ์†Œ์š”๋œ๋‹ค.
14+
- Space Complexity: O(n). n์€ ๋ฌธ์ž์—ด์˜ ๊ธธ์ด
15+
ํŒฐ๋ฆฐ๋“œ๋กฌ์ธ์ง€ ํ™•์ธํ•  ๋•Œ ๋ฌธ์ž์—ด ์Šฌ๋ผ์ด์‹ฑ์„ ์‚ฌ์šฉํ•˜๋Š”๋ฐ,
16+
์ตœ์•…์˜ ๊ฒฝ์šฐ ๋ถ€๋ถ„ ๋ฌธ์ž์—ด์˜ ๊ธธ์ด๊ฐ€ ์ž…๋ ฅ ๋ฌธ์ž์—ด์˜ ๊ธธ์ด์™€ ๊ฐ™์•„
17+
๊ณต๊ฐ„ ๋ณต์žก๋„๋Š” O(n)์ด๋‹ค.
18+
"""
19+
20+
result = s[0]
21+
22+
for i in range(len(s) - 1):
23+
for j in range(i + 1, len(s) + 1):
24+
if j - i <= len(result):
25+
continue
26+
27+
if self.is_palindrome(s[i:j]) and (j - i) > len(result):
28+
result = s[i:j]
29+
30+
return result
+47
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
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+
def isSubtree(self, root: Optional[TreeNode], subRoot: Optional[TreeNode]) -> bool:
13+
if not subRoot:
14+
return True
15+
if not root:
16+
return False
17+
18+
if self.isSameTree(root, subRoot):
19+
return True
20+
21+
has_subroot_in_left = self.isSubtree(root.left, subRoot)
22+
has_subroot_in_right = self.isSubtree(root.right, subRoot)
23+
24+
return has_subroot_in_left or has_subroot_in_right
25+
26+
def isSameTree(self, p: Optional[TreeNode], q: Optional[TreeNode]) -> bool:
27+
"""
28+
- Idea: ๋‘ ํŠธ๋ฆฌ๋ฅผ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋…ธ๋“œ ๋‹จ์œ„๋กœ ๋น„๊ตํ•œ๋‹ค.
29+
1. ๋‘ ๋…ธ๋“œ๊ฐ€ ๋ชจ๋‘ None์ด๋ผ๋ฉด ํ˜„์žฌ ๋‘ ํŠธ๋ฆฌ๋Š” ๋™์ผ
30+
2. ๋‘ ๋…ธ๋“œ๊ฐ€ None์ด ์•„๋‹ˆ๊ณ  ๊ฐ’์ด ๊ฐ™๋‹ค๋ฉด, ์™ผ์ชฝ๊ณผ ์˜ค๋ฅธ์ชฝ ์ž์‹ ๋…ธ๋“œ๋ฅผ ์žฌ๊ท€์ ์œผ๋กœ ๋น„๊ต
31+
3. ๋‘ ๋…ธ๋“œ๊ฐ€ ๋‹ค๋ฅด๊ฑฐ๋‚˜ ํ•œ์ชฝ๋งŒ None์ด๋ฉด ๋‘ ํŠธ๋ฆฌ๋Š” ์ƒ์ด
32+
- Time Complexity: O(m). m์€ ๋” ์ž‘์€ ํŠธ๋ฆฌ์˜ ๋…ธ๋“œ ์ˆ˜
33+
๊ฐ ๋…ธ๋“œ๋ฅผ ํ•œ๋ฒˆ์”ฉ ๋ฐฉ๋ฌธํ•˜๋ฏ€๋กœ O(m) ์‹œ๊ฐ„์ด ๊ฑธ๋ฆฐ๋‹ค.
34+
- Space Complexity: O(h). h๋Š” ๋” ์ž‘์€ ํŠธ๋ฆฌ์˜ ๋†’์ด
35+
์žฌ๊ท€ ํ˜ธ์ถœ ์Šคํƒ์— ์ตœ๋Œ€ h๋งŒํผ์˜ ๊ณต๊ฐ„์ด ์‚ฌ์šฉ๋œ๋‹ค.
36+
"""
37+
38+
if not p and not q:
39+
return True
40+
41+
if p and q and p.val == q.val:
42+
is_left_equal = self.isSameTree(p.left, q.left)
43+
is_right_equal = self.isSameTree(p.right, q.right)
44+
45+
return is_left_equal and is_right_equal
46+
47+
return False
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
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 isValidBST(self, root: Optional[TreeNode]) -> bool:
14+
"""
15+
- Idea: ๊ฐ ๋…ธ๋“œ ๊ฐ’์˜ ํ—ˆ์šฉ ๋ฒ”์œ„๋ฅผ ์ •ํ•˜๊ณ  ์žฌ๊ท€์ ์œผ๋กœ ๊ฒ€์‚ฌํ•œ๋‹ค.
16+
1. BST์˜ ์ •์˜ ํ™œ์šฉ
17+
์™ผ์ชฝ ์„œ๋ธŒํŠธ๋ฆฌ์˜ ๋ชจ๋“  ๊ฐ’์€ ํ˜„์žฌ ๋…ธ๋“œ ๊ฐ’๋ณด๋‹ค ์ž‘๊ณ , ์˜ค๋ฅธ์ชฝ ์„œ๋ธŒํŠธ๋ฆฌ์˜ ๋ชจ๋“  ๊ฐ’์€ ํ˜„์žฌ ๋…ธ๋“œ ๊ฐ’๋ณด๋‹ค ํผ.
18+
2. ์ดˆ๊ธฐ๊ฐ’์˜ ๋ฒ”์œ„๋ฅผ (-inf, inf)๋กœ ์„ค์ •
19+
3. ๊ฐ ๋…ธ๋“œ์˜ ๊ฐ’์„ ๊ฒ€์‚ฌํ•˜๊ณ , ๋ฒ”์œ„๋ฅผ ์—…๋ฐ์ดํŠธํ•ด์„œ ์žฌ๊ท€์ ์œผ๋กœ ์„œ๋ธŒ ํŠธ๋ฆฌ ํ™•์ธ
20+
- Time Complexity: O(n). n์€ ํŠธ๋ฆฌ์˜ ๋…ธ๋“œ ์ˆ˜
21+
๋ชจ๋“  ๋…ธ๋“œ๋ฅผ ํ•œ๋ฒˆ์”ฉ ๋ฐฉ๋ฌธํ•œ๋‹ค.
22+
- Space Complexity: O(h). h๋Š” ํŠธ๋ฆฌ์˜ ๋†’์ด
23+
์žฌ๊ท€ ํ˜ธ์ถœ ์Šคํƒ์ด ํŠธ๋ฆฌ์˜ ๋†’์ด๋งŒํผ ๊ณต๊ฐ„์„ ํ•„์š”๋กœ ํ•œ๋‹ค.
24+
ํŽธํ–ฅ๋œ ํŠธ๋ฆฌ๋ผ๋ฉด O(n)์ด ํ•„์š”ํ•˜๋‹ค.
25+
"""
26+
27+
def isValid(node: Optional[TreeNode], low: float, high: float) -> bool:
28+
if not node:
29+
return True
30+
if not (node.val < high and node.val > low):
31+
return False
32+
33+
return isValid(node.left, low, node.val) and isValid(
34+
node.right, node.val, high
35+
)
36+
37+
return isValid(root, float("-inf"), float("inf"))

0 commit comments

Comments
ย (0)