[yuseok89] WEEK 10 Solutions - #2836
Conversation
There was a problem hiding this comment.
๐ท๏ธ ์๊ณ ๋ฆฌ์ฆ ํจํด ๋ถ์
invert-binary-tree/yuseok89.py
# TC: O(N)
# SC: O(N)
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution:
def invertTree(self, root: Optional[TreeNode]) -> Optional[TreeNode]:
if not root:
return None
else:
cur_node = TreeNode(root.val)
cur_node.right = self.invertTree(root.left)
cur_node.left = self.invertTree(root.right)
return cur_node
- ํจํด: Binary Search, Depth-First Search, Divide and Conquer
- ์ค๋ช : ์ด ์ฝ๋๋ ์ด์งํธ๋ฆฌ์ ์์ ๋ ธ๋๋ฅผ ์๋ก ๋ฐ๊ฟ ํธ๋ฆฌ๋ฅผ ๋ฐ์ ์ํค๋ ์ฌ๊ท์ ๋ถํ ์ฒ๋ฆฌ๋ก์, DFS ๋ฐฉ์์ผ๋ก ๊ฐ ์๋ธํธ๋ฆฌ๋ฅผ ์ฒ๋ฆฌํ๋ฉฐ ๋ถํ ํด์ ํด๊ฒฐํ๋ ํจํด์ ์ฌ์ฉํฉ๋๋ค.
๐ ์๊ฐ/๊ณต๊ฐ ๋ณต์ก๋ ๋ถ์
| ์ ์ ๋ถ์ | ์ค์ ๋ถ์ | ๊ฒฐ๊ณผ | |
|---|---|---|---|
| Time | O(N) | O(n) | โ |
| Space | O(N) | O(h) | โ |
ํผ๋๋ฐฑ: ํธ๋ฆฌ์ ๊ฐ ๋ ธ๋๋ฅผ ํ ๋ฒ์ฉ ๋ฐฉ๋ฌธํ์ฌ ์์ ์ ๋ณด๋ฅผ ๊ตํํ๋ฏ๋ก ์๊ฐ ๋ณต์ก๋๋ O(n)์ด๊ณ , ์ฌ๊ท ํธ์ถ ์คํ์ ๊น์ด์ ๋น๋กํ๋ ๊ณต๊ฐ ๋ณต์ก๋ O(h)์ด๋ค.
๊ฐ์ ์ ์: ํ์ฌ ๊ตฌํ์ด ์ ์ ํด ๋ณด์ ๋๋ค.
๐ yuseok89 ๋์ ํ์ต ํํฉ์ด๋ฒ ์ฃผ ์ ์ถ ๋ฌธ์
๋์ ํ์ต ์์ฝ
๋ฌธ์ ํ์ด ํํฉ
๐ค ์ด ๋๊ธ์ GitHub App์ ํตํด ์๋์ผ๋ก ์์ฑ๋์์ต๋๋ค. ๐ข API ์ฌ์ฉ๋ (gpt-5-nano)
|
There was a problem hiding this comment.
์์ if๊ฐ ์ด๋ฏธ ๋ฆฌํด์ ํ๊ณ ์์ด์ else ๋ฅผ ํฌ๊ฒ ์ฐ์ง ์์ผ์
๋ ๋์ง ์์๊น? ๋ผ๋ ์๊ฐ์ด ๋ญ๋๋ค!
๋ํ cur_node ๋ฅผ ๋ง๋ค์ง ์์ผ์๊ณ root๋ฅผ ์ง์ ๋ฐ๊พธ์
๋ ์ ๋ต์ฒ๋ฆฌ ๋์ค๊ฑฐ์์!
There was a problem hiding this comment.
์ข๋ค์ !
๊ฐ์ฌํฉ๋๋ค ๐
There was a problem hiding this comment.
๐ท๏ธ ์๊ณ ๋ฆฌ์ฆ ํจํด ๋ถ์
course-schedule/yuseok89.py
# TC: O(N)
# SC: O(N)
class Solution:
def canFinish(self, numCourses: int, prerequisites: List[List[int]]) -> bool:
prereq_dict = defaultdict(set)
in_deg = [0] * numCourses
is_completed = set()
for prereq in prerequisites:
prereq_dict[prereq[1]].add(prereq[0])
in_deg[prereq[0]] += 1
while True:
course_list = []
for idx in range(numCourses):
if idx not in is_completed and in_deg[idx] == 0:
course_list.append(idx)
if len(course_list) == 0:
break
for course in course_list:
is_completed.add(course)
for nxt in prereq_dict[course]:
in_deg[nxt] -= 1
for idx in range(numCourses):
if idx not in is_completed:
return False
return True
- ํจํด: Depth-First Search, Greedy, Dynamic Programming, Hash Map / Hash Set
- ์ค๋ช : ๊ทธ๋ํ์์์์ ๋ ฌ ์์ด๋์ด๋ก ์ ํ๊ด๊ณ ์ ๊ฑฐํ๋ฉฐ ์ฌ์ดํด์ด ์๋์ง ํ์ธํ๋ ํจํด์ผ๋ก ๋์ํฉ๋๋ค. ๊ตฌํ์ indegree ๊ธฐ๋ฐ์ผ๋ก 0์ธ ๋ ธ๋๋ฅผ ์ฐจ๋ก๋๋ก ์ฒ๋ฆฌํ๋ ๋ฐฉ์์ด๋ผ ์์์ ๋ ฌ์ ์ ํ์ ํ๋ฆ์ ๋ณด์ด๊ณ , ๋ถํธ์คํธ๋ฉ ๊ณผ์ ์์ ์ฐ์ ์์๋ฅผ ์ ํํ๋ ์ ์ด ๊ทธ๋ฆฌ๋ํ๊ฒ ํด์๋ ์ ์์ต๋๋ค. ๋ํ ๋ฐฉ๋ฌธ ์ฌ๋ถ๋ฅผ ์งํฉ์ผ๋ก ๊ด๋ฆฌํฉ๋๋ค.
๐ ์๊ฐ/๊ณต๊ฐ ๋ณต์ก๋ ๋ถ์
| ์ ์ ๋ถ์ | ์ค์ ๋ถ์ | ๊ฒฐ๊ณผ | |
|---|---|---|---|
| Time | O(N) | O(V + E) | โ |
| Space | O(N) | O(V + E) | โ |
ํผ๋๋ฐฑ: ์ง์ ์ฐจ์ ๋ฐฐ์ด๊ณผ ๊ทธ๋ํ ํํ์ผ๋ก ๋ชจ๋ ์ ์ ์ด ์ฐจ์ 0์ด ๋๋ ์์ ์ ์ฐจ๋ก๋ก ์ ๊ฑฐํ๋ฉฐ ์ฌ์ดํด ์ฌ๋ถ๋ฅผ ํ๋จํฉ๋๋ค.
๊ฐ์ ์ ์: ํ์ฌ ๊ตฌํ์ด ์ ์ ํด ๋ณด์ ๋๋ค.
There was a problem hiding this comment.
๐ท๏ธ ์๊ณ ๋ฆฌ์ฆ ํจํด ๋ถ์
invert-binary-tree/yuseok89.py
# TC: O(N)
# SC: O(logN)
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution:
def invertTree(self, root: Optional[TreeNode]) -> Optional[TreeNode]:
if not root:
return None
root.left, root.right = self.invertTree(root.right), self.invertTree(root.left)
return root
- ํจํด: Binary Search, Depth First Search, Divide and Conquer
- ์ค๋ช : ์ฃผ์ด์ง ์ฝ๋๋ ์ฌ๊ท์ ์ผ๋ก ํธ๋ฆฌ์ ์ข์ฐ ์์์ ์๋ก ๋ค์ง๋ ๋ฐฉ์์ผ๋ก ๋์ํฉ๋๋ค. ๋ถํ ๋ ์๋ธํธ๋ฆฌ์ ๋ํด ์ฌ๊ท์ ์ผ๋ก ์ฒ๋ฆฌํ๊ณ , ๊ฐ ์ฌ๊ท์์ ์ข์ฐ๋ฅผ ๊ตํํ๋ ๊ณผ์ ์ด Divide and Conquer ๋ฐ DFS ํํ๋ฅผ ๋ณด์ ๋๋ค.
๐ ์๊ฐ/๊ณต๊ฐ ๋ณต์ก๋ ๋ถ์
| ์ ์ ๋ถ์ | ์ค์ ๋ถ์ | ๊ฒฐ๊ณผ | |
|---|---|---|---|
| Time | O(N) | O(n) | โ |
| Space | O(logN) | O(h) | โ |
ํผ๋๋ฐฑ: ๋ชจ๋ ๋ ธ๋๋ฅผ ํ ๋ฒ์ฉ ๋ฐฉ๋ฌธํ๊ณ ํธ์ถ ์คํ ๊น์ด๋ ํธ๋ฆฌ์ ๋์ด์ ๊ฐ์
๊ฐ์ ์ ์: ํ์ฌ ๊ตฌํ์ด ์ ์ ํด ๋ณด์ ๋๋ค.
There was a problem hiding this comment.
๐ท๏ธ ์๊ณ ๋ฆฌ์ฆ ํจํด ๋ถ์
jump-game/yuseok89.py
# TC: O(N)
# SC: O(1)
class Solution:
def canJump(self, nums: List[int]) -> bool:
n = len(nums)
m, idx = 0, 0
while idx <= m and idx < n:
m = max(m, idx + nums[idx])
idx += 1
return m >= n - 1
- ํจํด: Greedy, Two Pointers
- ์ค๋ช : ์ด ์ฝ๋๋ ํ์ฌ ์ธ๋ฑ์ค๊น์ง ๋๋ฌ ๊ฐ๋ฅํ ์ต๋ ๋๋ฌ ์์น๋ฅผ ์ถ์ ํ๋ฉฐ, ๊ฐ ์์น์์ ์์ผ๋ก ๋๋ฌํ ์ ์๋ ๋ฒ์๋ฅผ ํ์ฅํ๋ ๋ฐฉ์์ผ๋ก ์ต๋๊ฐ์ ๊ฐฑ์ ํ๋ค. ๋จ์ผ ๋ฃจํ(์ ํ)๋ก ๊ฐ๋ฅํ์ง ์ฌ๋ถ๋ฅผ ํ๋จํ๋ฏ๋ก Greedy ํจํด์ ์ํ๊ณ , ์ ๋์ ๋งค๊ฐ๋ก ํ๋ ํ์์ ํ๋ฆ์ด Two Pointers์ ์ ์ฌํ๊ฒ ๋์ํ๋ค.
๐ ์๊ฐ/๊ณต๊ฐ ๋ณต์ก๋ ๋ถ์
| ์ ์ ๋ถ์ | ์ค์ ๋ถ์ | ๊ฒฐ๊ณผ | |
|---|---|---|---|
| Time | O(N) | O(n) | โ |
| Space | O(1) | O(1) | โ |
ํผ๋๋ฐฑ: ๊ทธ๋ฆฌ๋ ๋ฐฉ์์ผ๋ก ํ ๋ฒ์ ์ํ๋ก ํด๊ฒฐ ๊ฐ๋ฅํ๊ณ , ์ถ๊ฐ ๊ณต๊ฐ์ ์์์ ๊ฐ๊น์ต๋๋ค.
๊ฐ์ ์ ์: ํ์ฌ ๊ตฌํ์ด ์ ์ ํด ๋ณด์ ๋๋ค.
There was a problem hiding this comment.
๐ท๏ธ ์๊ณ ๋ฆฌ์ฆ ํจํด ๋ถ์
merge-k-sorted-lists/yuseok89.py
# TC: O(NlogN)
# SC: O(N)
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, val=0, next=None):
# self.val = val
# self.next = next
class Solution:
def mergeKLists(self, lists: List[Optional[ListNode]]) -> Optional[ListNode]:
ret_head = ListNode()
cur = ret_head
heap = []
for i, node in enumerate(lists):
if node is not None:
heapq.heappush(heap, (node.val, i, node))
while heap:
val, i, node = heapq.heappop(heap)
cur.next = node
cur = cur.next
if node.next is not None:
heapq.heappush(heap, (node.next.val, i, node.next))
return ret_head.next
- ํจํด: Heap / Priority Queue, Divide and Conquer
- ์ค๋ช : ์ฌ๋ฌ ๊ฐ์ ์ ๋ ฌ๋ ๋ฆฌ์คํธ๋ฅผ ํ์ผ๋ก ๋ณํฉํ๋ ๋ฐฉ์์ผ๋ก ์ต์ ์์๋ฅผ ๋งค๋ฒ ๊บผ๋ด๋ ํจํด์ด๋ค. ๊ฐ ๋ฆฌ์คํธ ์์๋ฅผ ํ์ ๋ด์ ์์ฐจ์ ์ผ๋ก ์ฐ๊ฒฐํ๋ฏ๋ก ์ฐ์ ์์ ํ์ ํ์ฉ์ด ํต์ฌ์ด๋ค.
๐ ์๊ฐ/๊ณต๊ฐ ๋ณต์ก๋ ๋ถ์
| ์ ์ ๋ถ์ | ์ค์ ๋ถ์ | ๊ฒฐ๊ณผ | |
|---|---|---|---|
| Time | O(NlogN) | O(N log k) | โ |
| Space | O(N) | O(k) | โ |
ํผ๋๋ฐฑ: ์ด ๋ ธ๋ ์๋ฅผ N์ด๋ผ ํ ๋ ๊ฐ ์ฝ์ /์ญ์ ๊ฐ ๋ก๊ทธ k ์ด๋ฏ๋ก ์ ์ฒด ์๊ฐ์ O(N log k), ํ์ ๋ฆฌ์คํธ ์ k ๋งํผ ์ฌ์ฉ
๊ฐ์ ์ ์: ํ์ฌ ๊ตฌํ์ด ์ ์ ํด ๋ณด์ ๋๋ค.
There was a problem hiding this comment.
๐ท๏ธ ์๊ณ ๋ฆฌ์ฆ ํจํด ๋ถ์
search-in-rotated-sorted-array/yuseok89.py
# TC: O(logN)
# SC: O(1)
class Solution:
def search(self, nums: List[int], target: int) -> int:
n = len(nums)
l, r = 0, n - 1
while l < r:
m = (l + r) // 2
if nums[m] > nums[r]:
l = m + 1
else:
r = m
if target >= nums[0]:
r = (l + n - 1) % n
l = 0
else:
r = n - 1
while l <= r:
m = (l + r) // 2
if nums[m] == target:
return m
elif nums[m] < target:
l = m + 1
else:
r = m - 1
return -1
- ํจํด: Binary Search, Two Pointers
- ์ค๋ช : ๊ตฌํ์ ํ์ ๋ ์ ๋ ฌ ๋ฐฐ์ด์์ ๋ชฉํ๊ฐ์ ์ด์ง ํ์์ผ๋ก ์ฐพ๋ ๊ณผ์ ์ ๋ ๋จ๊ณ๋ก ๊ตฌ์ฑํฉ๋๋ค. ๋จผ์ ํ์ ์์น๋ฅผ ์ฐพ๊ธฐ ์ํด ์ด์ง ํ์์ ํน์ฑ์ ์ด์ฉํ๊ณ , ๊ทธ ํ ๊ตฌ๊ฐ์ ๋๋์ด ์ด์ง ํ์์ผ๋ก ํ๊น์ ๊ฒ์ํฉ๋๋ค.
๐ ์๊ฐ/๊ณต๊ฐ ๋ณต์ก๋ ๋ถ์
| ์ ์ ๋ถ์ | ์ค์ ๋ถ์ | ๊ฒฐ๊ณผ | |
|---|---|---|---|
| Time | O(logN) | O(log n) | โ |
| Space | O(1) | O(1) | โ |
ํผ๋๋ฐฑ: ํ์ ์ฌ๋ถ๋ฅผ ํ๋จํด ๋ถํ ๊ตฌ๊ฐ์ ์ขํ๊ฐ๋ฉฐ ์ด๋ถ ํ์์ ์ํํฉ๋๋ค.
๊ฐ์ ์ ์: ํ์ฌ ๊ตฌํ์ด ์ ์ ํด ๋ณด์ ๋๋ค.
There was a problem hiding this comment.
์ ๋ง ๊น๋ํ๊ฒ ์ ํด๊ฒฐํด ์ฃผ์
จ๋๋ฐ์!
์ ์๊ฐ์ is_completed์ ์๋ฃ๋ฅผ ์๋ฃํ ๊ณผ๋ชฉ์ ๊ฐฏ์๋ง ๊ธฐ๋กํด๋ ๊ฐ๋ฅํ์ง ์์๊น? ๋ผ๋ ์๊ฐ์ด ๋ค์์ด์
์ด๋ค์ง ํ๋ฒ ์๊ฐํด๋ณด์๋ฉด ๋์ฑ ์ข์๊ฒ ๊ฐ์ต๋๋ค!
There was a problem hiding this comment.
๋๋ถ์ ๋ง์ ๊ณต๋ถ๊ฐ ๋๋ค์
๊ฐ์ฌํฉ๋๋ค !
There was a problem hiding this comment.
์๋นํ ๊น๋ํ ๊ทธ๋ฆฌ๋๋ค์! ์ ๋ณด๊ณ ๊ฐ๋๋ค
There was a problem hiding this comment.
๊น๋ํ๊ฒ ์ ํด๊ฒฐํด ์ฃผ์
จ๋๋ฐ์, ํด๋น ๋ฌธ์ ๋ ๋จ์ผ while๋ก๋ ํด๊ฒฐ ๊ฐ๋ฅํ๋ต๋๋ค!
ํ๋ฒ ์๋ํด๋ณด์๋ฉด ์ข์๊ฒ ๊ฐ์์
There was a problem hiding this comment.
๊ทธ๋ ๋ค์ ๊ฐ์ฌํฉ๋๋ค !
| l = m + 1 | ||
| else: | ||
| r = m | ||
|
|
There was a problem hiding this comment.
r = (l + n - 1) % n์์ % n์ ์ญํ ์ด ์กฐ๊ธ ๋ ์ฝ๊ฒ ์ฝํ๋ฉด ์ข๊ฒ ๋ค๋ ์๊ฐ์ด ๋ค์์ต๋๋ค. ํ์ ์ด ์์ด์ ํผ๋ฒ์ด 0์ผ ๋ l - 1 = -1์ด ๋๋ ๊ฑธ n - 1๋ก ๋๋ ค๋ง๋ ์ฉ๋๋ก ๋ณด์ด๋๋ฐ, ์ฒ์ ์ฝ์ผ๋ฉด ์ ๋ชจ๋๋ฌ๊ฐ ๋์ค๋์ง ํ ๋ฒ ๋์ง์ด๋ด์ผ ํ๋๋ผ๊ณ ์. ์ฒซ ๋ฃจํ๊ฐ ๋๋ l์ ์ด๋ฆ์ ๋ถ์ด๊ณ ๋ ๋ถ๊ธฐ์์ l, r์ ๋ ๋ค ๋ช ์ํด์ฃผ๋ฉด ์ฝ๋๊ฐ ์ข ๋ ๊ธธ์ด์ง๋๋ผ๋ ์ฝ๊ธฐ๋ ์ฌ์์ง ๊ฒ ๊ฐ์์. ์๋ฅผ ๋ค์ด
pivot = l
if target >= nums[0]:
l, r = 0, (pivot - 1 if pivot else n - 1)
else:
l, r = pivot, n - 1
|
|
||
| while True: | ||
| course_list = [] | ||
|
|
There was a problem hiding this comment.
๋ผ์ด๋๋ง๋ค for idx in range(numCourses)๋ก ์ ์ฒด ๊ณผ๋ชฉ์ ๋ค์ ํ๊ณ ์์ด์, ๋ผ์ด๋ ์ ร ๊ณผ๋ชฉ ์๋งํผ ๊ณ์ฐ์ด ์์๋ฉ๋๋ค. ์ ์๊ด๊ณ๊ฐ 0 โ 1 โ 2 โ ...์ฒ๋ผ ํ ์ค๋ก ์ด์ด์ง๋ฉด ๋ผ์ด๋๊ฐ ๊ณผ๋ชฉ ์๋งํผ ์๊ธฐ๋๋ฐ, ์ ์ฝ ์ํ์ธ 2000๊ณผ๋ชฉ์ด๋ฉด ๋ผ์ด๋๊ฐ 2001ํ ๋๊ณ ์ค์บ์ด 400๋ง ๋ฒ ์ผ์ด๋์ O(Vยฒ + E)์ ๊ฐ๊น์ธ ๊ฒ ๊ฐ์์.
in_deg๊ฐ ๊ฐ์ํ๋ ๊ทธ ์๋ฆฌ์์ 0์ด ๋๋์ง ๋ฐ๋ก ํ์ ํด๋๋ฉด "๋ค์์ ์ฒ๋ฆฌํ ๊ณผ๋ชฉ์ ์ฐพ๋" ๋จ๊ณ๊ฐ ํต์งธ๋ก ์์ด์ง๊ณ , ๊ฐ ๊ณผ๋ชฉ๊ณผ ๊ฐ ๊ฐ์ ์ ํ ๋ฒ์ฉ๋ง ๋ณด๊ฒ ๋์ด O(V + E)๋ก ์ค์ผ ์ ์์ง ์์๊น ํฉ๋๋ค.
There was a problem hiding this comment.
๋๋ถ์ ๋ง์ ๊ณต๋ถ๊ฐ ๋๋ค์
๊ฐ์ฌํฉ๋๋ค !
There was a problem hiding this comment.
๐ท๏ธ ์๊ณ ๋ฆฌ์ฆ ํจํด ๋ถ์
course-schedule/yuseok89.py
# TC: O(V + E)
# SC: O(V + E)
class Solution:
def canFinish(self, numCourses: int, prerequisites: List[List[int]]) -> bool:
graph = [[] for _ in range(numCourses)]
in_deg = [0] * numCourses
for nxt, prev in prerequisites:
graph[prev].append(nxt)
in_deg[nxt] += 1
queue = deque(idx for idx in range(numCourses) if in_deg[idx] == 0)
completed = 0
while queue:
course = queue.popleft()
completed += 1
for nxt in graph[course]:
in_deg[nxt] -= 1
if in_deg[nxt] == 0:
queue.append(nxt)
return completed == numCourses
- ํจํด: BFS, Topological Sort
- ์ค๋ช : ๊ทธ๋ํ์ ์์ ์ ๋ ฌ(BFS ๊ธฐ๋ฐ ํ๋ฅผ ์ด์ฉํ ์์ฐจ ๋ฐฉ๋ฌธ)๋ก ์ฌ์ดํด ์ฌ๋ถ๋ฅผ ํ๋จํฉ๋๋ค. ์ง์ ์ฐจ์, ์ธ์ ๋ฆฌ์คํธ๋ฅผ ํ์ฉํด ์์๋๋ก ๋ ธ๋๋ฅผ ์ ๊ฑฐํ๋ฉฐ ๋ชจ๋ ์ ์ ์ ๋ฐฉ๋ฌธํ๋ฉด ๊ฐ๋ฅํฉ๋๋ค.
๐ ์๊ฐ/๊ณต๊ฐ ๋ณต์ก๋ ๋ถ์
โน๏ธ ์ด ํ์ผ์๋ 2๊ฐ์ง ํ์ด๊ฐ ํฌํจ๋์ด ์์ด ๊ฐ๊ฐ ๋ถ์ํฉ๋๋ค.
ํ์ด 1: Solution.canFinish โ Time: โ O(V + E) โ O(N + E) / Space: โ O(V + E) โ O(N + E)
| ์ ์ ๋ถ์ | ์ค์ ๋ถ์ | ๊ฒฐ๊ณผ | |
|---|---|---|---|
| Time | O(V + E) | O(N + E) | โ |
| Space | O(V + E) | O(N + E) | โ |
ํผ๋๋ฐฑ: ๊ทธ๋ํ๋ฅผ ๊ตฌ์ฑํ๊ณ ์ง์ ์ฐจ์๋ก ํ๋ฅผ ๊ด๋ฆฌํ๋ฉด์ ๋ชจ๋ ๋ ธ๋๋ฅผ ํ ๋ฒ์ฉ ์ฒ๋ฆฌํ๋ค.
๊ฐ์ ์ ์: ํ์ฌ ๊ตฌํ์ด ์ ์ ํด ๋ณด์ ๋๋ค.
ํ์ด 2: Solution.canFinish โ Time: โ O(V + E) โ O(N + E) / Space: โ O(V + E) โ O(N + E)
| ์ ์ ๋ถ์ | ์ค์ ๋ถ์ | ๊ฒฐ๊ณผ | |
|---|---|---|---|
| Time | O(V + E) | O(N + E) | โ |
| Space | O(V + E) | O(N + E) | โ |
ํผ๋๋ฐฑ: ๊ทธ๋ํ๋ฅผ ๊ตฌ์ฑํ๊ณ ์ง์ ์ฐจ์๋ก ํ๋ฅผ ๊ด๋ฆฌํ๋ฉด์ ๋ชจ๋ ๋ ธ๋๋ฅผ ํ ๋ฒ์ฉ ์ฒ๋ฆฌํ๋ค.
๊ฐ์ ์ ์: ํ์ฌ ๊ตฌํ์ด ์ ์ ํด ๋ณด์ ๋๋ค.
There was a problem hiding this comment.
๐ท๏ธ ์๊ณ ๋ฆฌ์ฆ ํจํด ๋ถ์
search-in-rotated-sorted-array/yuseok89.py
# TC: O(logN)
# SC: O(1)
class Solution:
def search(self, nums: List[int], target: int) -> int:
n = len(nums)
l, r = 0, n - 1
while l <= r:
m = (l + r) // 2
if nums[m] == target:
return m
if nums[l] <= nums[m]:
if nums[l] <= target < nums[m]:
r = m - 1
else:
l = m + 1
else:
if nums[m] < target <= nums[r]:
l = m + 1
else:
r = m - 1
return -1
- ํจํด: Binary Search, Monotonic Stack, Divide and Conquer
- ์ค๋ช : ํ์ ๋ ์ ๋ ฌ ๋ฐฐ์ด์์ ์ค๊ฐ๊ฐ ๋น๊ต๋ก ๋ฒ์๋ฅผ ์ ๋ฐ์ฉ ์ค์ฌ ํ์ํ๋ ์ด์ง ํ์์ ๋ณํ์ผ๋ก, ๋ฐฐ์ด์ ๋จ์กฐ์ฑ(๊ฐ ๋ถ๋ถ์ด ์ ๋ ฌ๋จ)์ ์ด์ฉํด target ์์น๋ฅผ ์ถ์ ํฉ๋๋ค. ๋ฐ๋ผ์ ์ฃผ ํจํด์ Binary Search์ด๋ฉฐ, ๋ฐฐ์ด์ ๊ตฌ๊ฐ ์ถ์๊ฐ ํต์ฌ์ ๋๋ค.
๐ ์๊ฐ/๊ณต๊ฐ ๋ณต์ก๋ ๋ถ์
โน๏ธ ์ด ํ์ผ์๋ 2๊ฐ์ง ํ์ด๊ฐ ํฌํจ๋์ด ์์ด ๊ฐ๊ฐ ๋ถ์ํฉ๋๋ค.
ํ์ด 1: Solution.search โ Time: โ
O(logN) โ O(log n) / Space: โ
O(1) โ O(1)
| ์ ์ ๋ถ์ | ์ค์ ๋ถ์ | ๊ฒฐ๊ณผ | |
|---|---|---|---|
| Time | O(logN) | O(log n) | โ |
| Space | O(1) | O(1) | โ |
ํผ๋๋ฐฑ: ํ์ ๋ ๋ฐฐ์ด์์๋ ์ค๋ณต ์์ด ๋ชฉํ๋ฅผ ์ฐพ๊ธฐ ์ํด ์ ๋๊ณผ ์ค๊ฐ ๊ฐ์ ๋น๊ตํ๋ฉฐ ๊ตฌ๊ฐ์ ์ ๋ฐ์ผ๋ก ์ถ์ํ๋ค.
๊ฐ์ ์ ์: ํ์ฌ ๊ตฌํ์ด ์ ์ ํด ๋ณด์ ๋๋ค.
ํ์ด 2: Solution.search โ Time: โ
O(logN) โ O(log n) / Space: โ
O(1) โ O(1)
| ์ ์ ๋ถ์ | ์ค์ ๋ถ์ | ๊ฒฐ๊ณผ | |
|---|---|---|---|
| Time | O(logN) | O(log n) | โ |
| Space | O(1) | O(1) | โ |
ํผ๋๋ฐฑ: ํ์ ๋ ๋ฐฐ์ด์์๋ ์ค๋ณต ์์ด ๋ชฉํ๋ฅผ ์ฐพ๊ธฐ ์ํด ์ ๋๊ณผ ์ค๊ฐ ๊ฐ์ ๋น๊ตํ๋ฉฐ ๊ตฌ๊ฐ์ ์ ๋ฐ์ผ๋ก ์ถ์ํ๋ค.
๊ฐ์ ์ ์: ํ์ฌ ๊ตฌํ์ด ์ ์ ํด ๋ณด์ ๋๋ค.
๋ต์ ์ ์ถ ๋ฌธ์
์์ฑ์ ์ฒดํฌ ๋ฆฌ์คํธ
In Review๋ก ์ค์ ํด์ฃผ์ธ์.๊ฒํ ์ ์ฒดํฌ ๋ฆฌ์คํธ
Important
๋ณธ์ธ ๋ต์ ์ ์ถ ๋ฟ๋ง ์๋๋ผ ๋ค๋ฅธ ๋ถ PR ํ๋ ์ด์์ ๋ฐ๋์ ๊ฒํ ๋ฅผ ํด์ฃผ์ ์ผ ํฉ๋๋ค!