Skip to content

Commit 0dec6d1

Browse files
authored
Merge pull request #1107 from KwonNayeon/main
[KwonNayeon] Week 15
2 parents eb7729c + 9427dbd commit 0dec6d1

File tree

4 files changed

+144
-0
lines changed

4 files changed

+144
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
"""
2+
Constraints:
3+
- 1 <= s.length <= 1000
4+
- s consist of only digits and English letters.
5+
6+
Time Complexity: O(n^3)
7+
- ๋ชจ๋“  ๋ถ€๋ถ„ ๋ฌธ์ž์—ด์„ ๊ตฌํ•  ๋•Œ O(n^2)
8+
- ๊ฐ ๋ถ€๋ถ„ ๋ฌธ์ž์—ด์ด ํŒฐ๋ฆฐ๋“œ๋กฌ์ธ์ง€๋ฅผ ์•Œ์•„๋‚ผ ๋•Œ O(n)
9+
10+
Space Complexity: O(1)
11+
12+
Note:
13+
- ๋” ํšจ์œจ์ ์ธ ๋ฐฉ๋ฒ• ์ƒ๊ฐํ•ด๋ณด๊ธฐ/์ฐพ์•„๋ณด๊ธฐ
14+
"""
15+
# Solution 1: Brute force
16+
# ๋ฌธ์ž์—ด์˜ ์‹œ์ž‘๊ฐ’๊ณผ ๋๊ฐ’์„ ์ด์šฉํ•˜์—ฌ ๊ฐ€์žฅ ๊ธด ํŒฐ๋ฆฐ๋“œ๋กฌ์œผ๋กœ ์—…๋ฐ์ดํŠธํ•˜๋Š” ๋ฐฉ์‹
17+
class Solution:
18+
def longestPalindrome(self, s: str) -> str:
19+
longest_palindrome = ""
20+
max_len = 0
21+
22+
for i in range(len(s)):
23+
for j in range(i, len(s)):
24+
substr = s[i:j+1]
25+
26+
if substr == substr[::-1]:
27+
if len(substr) > max_len:
28+
max_len = len(substr)
29+
longest_palindrome = substr
30+
31+
return longest_palindrome

โ€Žrotate-image/KwonNayeon.py

+15
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
"""
2+
Constraints:
3+
- n == matrix.length == matrix[i].length
4+
- 1 <= n <= 20
5+
- -1000 <= matrix[i][j] <= 1000
6+
7+
Time Complexity:
8+
-
9+
10+
Space Complexity:
11+
-
12+
13+
ํ’€์ด๋ฐฉ๋ฒ•:
14+
1.
15+
"""
+56
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
"""
2+
Constraints:
3+
- The number of nodes in the root tree is in the range [1, 2000].
4+
- The number of nodes in the subRoot tree is in the range [1, 1000].
5+
- -10^4 <= root.val <= 10^4
6+
- -10^4 <= subRoot.val <= 10^4
7+
8+
Time Complexity: O(m * n)
9+
- m: root์˜ ๋…ธ๋“œ ์ˆ˜
10+
- n: subRoot์˜ ๋…ธ๋“œ ์ˆ˜
11+
12+
Space Complexity: O(m)
13+
- ์žฌ๊ท€ ํ˜ธ์ถœ ์Šคํƒ์˜ ์ตœ๋Œ€ ๊นŠ์ด๋Š” root์˜ ๋†’์ด
14+
15+
ํ’€์ด๋ฐฉ๋ฒ•:
16+
1. Base case:
17+
- subRoot๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ True
18+
- root๊ฐ€ ๋นˆ ํŠธ๋ฆฌ์ด๊ณ , subRoot๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ False
19+
2. ์„œ๋ธŒํŠธ๋ฆฌ๊ฐ€ ๋™์ผํ•œ์ง€๋ฅผ ํ™•์ธํ•˜๋Š” ์žฌ๊ท€ ํ•จ์ˆ˜ ํ™œ์šฉ:
20+
- isSameTree()๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋‘ ํŠธ๋ฆฌ๊ฐ€ ๋™์ผํ•œ์ง€ ํŒ๋‹จ
21+
- ํ˜„์žฌ ๋…ธ๋“œ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ด subRoot์™€ ๊ฐ™์€์ง€ ํ™•์ธ
22+
- ๊ฐ™์ง€ ์•Š๋‹ค๋ฉด ์™ผ์ชฝ๊ณผ ์˜ค๋ฅธ์ชฝ ์„œ๋ธŒํŠธ๋ฆฌ๋ฅผ ๋‹ค์‹œ ๊ฒ€์‚ฌํ•จ
23+
3. ์žฌ๊ท€์ ์œผ๋กœ ์„œ๋ธŒํŠธ๋ฆฌ๋ฅผ ํƒ์ƒ‰
24+
- ํ˜„์žฌ ๋…ธ๋“œ์—์„œ ์‹œ์ž‘ํ•˜๋Š” ์„œ๋ธŒํŠธ๋ฆฌ๊ฐ€ subRoot์™€ ๊ฐ™๋‹ค๋ฉด True
25+
- ์•„๋‹ˆ๋ผ๋ฉด ์™ผ์ชฝ ๋˜๋Š” ์˜ค๋ฅธ์ชฝ ์„œ๋ธŒํŠธ๋ฆฌ์—์„œ ๊ณ„์† ํƒ์ƒ‰
26+
"""
27+
# Definition for a binary tree node.
28+
# class TreeNode:
29+
# def __init__(self, val=0, left=None, right=None):
30+
# self.val = val
31+
# self.left = left
32+
# self.right = right
33+
class Solution:
34+
def isSubtree(self, root: Optional[TreeNode], subRoot: Optional[TreeNode]) -> bool:
35+
if not subRoot:
36+
return True
37+
38+
if not root:
39+
return False
40+
41+
if self.isSameTree(root, subRoot):
42+
return True
43+
44+
return self.isSubtree(root.left, subRoot) or self.isSubtree(root.right, subRoot)
45+
46+
def isSameTree(self, p: TreeNode, q: TreeNode):
47+
if not p and not q:
48+
return True
49+
50+
if not p or not q:
51+
return False
52+
53+
if p.val != q.val:
54+
return False
55+
56+
return self.isSameTree(p.left, q.left) and self.isSameTree(p.right, q.right)
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
"""
2+
Constraints:
3+
- The number of nodes in the tree is in the range [1, 10^4].
4+
- -2^31 <= Node.val <= 2^31 - 1
5+
6+
Time Complexity: O(n)
7+
- ํŠธ๋ฆฌ์˜ ๋ชจ๋“  ๋…ธ๋“œ๋ฅผ ํ•œ ๋ฒˆ์”ฉ ๋ฐฉ๋ฌธํ•จ
8+
9+
Space Complexity: O(h)
10+
- ์žฌ๊ท€ ํ˜ธ์ถœ ์Šคํƒ์˜ ์ตœ๋Œ€ ๊นŠ์ด๋Š” ํŠธ๋ฆฌ์˜ ๋†’์ด
11+
12+
ํ’€์ด๋ฐฉ๋ฒ•:
13+
1. ๊ฐ ๋…ธ๋“œ๊ฐ€ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋Š” ๊ฐ’์˜ ๋ฒ”์œ„๋ฅผ ํ•œ์ •ํ•จ
14+
- root ๋…ธ๋“œ์˜ ๋ฒ”์œ„๋Š” (-๋ฌดํ•œ๋Œ€, +๋ฌดํ•œ๋Œ€)๋กœ ์„ค์ •
15+
2. Base case:
16+
- ๋นˆ ๋…ธ๋“œ์˜ ๊ฒฝ์šฐ True
17+
- ๋…ธ๋“œ ๊ฐ’์ด ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚˜๋ฉด False
18+
3. ์žฌ๊ท€๋ฅผ ํ™œ์šฉ:
19+
- ์™ผ์ชฝ ์„œ๋ธŒํŠธ๋ฆฌ: max_val๋ฅผ ํ˜„์žฌ ๋…ธ๋“œ ๊ฐ’์œผ๋กœ ์—…๋ฐ์ดํŠธ (๋ชจ๋‘ ํ˜„์žฌ ๊ฐ’๋ณด๋‹ค ์ž‘์•„์•ผ ํ•จ)
20+
- ์˜ค๋ฅธ์ชฝ ์„œ๋ธŒํŠธ๋ฆฌ: min_val์„ ํ˜„์žฌ ๋…ธ๋“œ ๊ฐ’์œผ๋กœ ์—…๋ฐ์ดํŠธ (๋ชจ๋‘ ํ˜„์žฌ ๊ฐ’๋ณด๋‹ค ์ปค์•ผ ํ•จ)
21+
- ์™ผ์ชฝ๊ณผ ์˜ค๋ฅธ์ชฝ ์„œ๋ธŒํŠธ๋ฆฌ๊ฐ€ ๋ชจ๋‘ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋ฉด BST
22+
"""
23+
# Definition for a binary tree node.
24+
# class TreeNode:
25+
# def __init__(self, val=0, left=None, right=None):
26+
# self.val = val
27+
# self.left = left
28+
# self.right = right
29+
class Solution:
30+
def isValidBST(self, root: Optional[TreeNode]) -> bool:
31+
def validate(node, min_val, max_val):
32+
if not node:
33+
return True
34+
35+
if not (min_val < node.val < max_val):
36+
return False
37+
38+
return (validate(node.left, min_val, node.val) and
39+
validate(node.right, node.val, max_val))
40+
41+
return validate(root, float("-inf"), float("inf"))
42+

0 commit comments

Comments
ย (0)