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+
"""

subtree-of-another-tree/KwonNayeon.py

+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)
+42
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)