Skip to content

Commit bb33f93

Browse files
committed
WEEK 10 soltions
1 parent ebbeb84 commit bb33f93

4 files changed

Lines changed: 99 additions & 0 deletions

File tree

course-schedule/HYUNAHKO.py

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
class Solution:
2+
def canFinish(self, numCourses: int, prerequisites: List[List[int]]) -> bool:
3+
# 1. 그래프 만들기 (인접 리스트)
4+
# graph[A] = [B, C] : A를 듣기 위해 B, C가 필요함 (혹은 방향에 따라 반대)
5+
graph = collections.defaultdict(list)
6+
for course, pre in prerequisites:
7+
graph[course].append(pre)
8+
9+
# 2. 방문 상태 기록 (0, 1, 2)
10+
# 0: 아직 안 가봄 (White)
11+
# 1: 지금 탐색 중인 경로 (Grey) -> 여기서 또 만나면 뱅글뱅글 도는 것(사이클)!
12+
# 2: 이미 검증 끝남 (Black) -> 안전함
13+
visit = [0] * numCourses
14+
15+
def dfs(course):
16+
# 탐색 중인 노드를 다시 만남 == 사이클 발생!
17+
if visit[course] == 1:
18+
return False
19+
20+
# 이미 검증 끝난 노드 == 문제 없음 Pass
21+
if visit[course] == 2:
22+
return True
23+
24+
# 현재 노드를 '탐색 중(1)'으로 표시
25+
visit[course] = 1
26+
27+
# 선수 과목들 쭉 파고들기
28+
for pre in graph[course]:
29+
if not dfs(pre): # 재귀 호출 결과가 False(사이클 발견)라면
30+
return False # 즉시 False 리턴
31+
32+
# 더 이상 갈 곳 없음. '탐색 완료(2)'로 표시
33+
visit[course] = 2
34+
return True
35+
36+
# 3. 모든 과목에 대해 확인 (그래프가 여러 덩어리일 수 있으므로)
37+
for i in range(numCourses):
38+
if not dfs(i):
39+
return False
40+
41+
return True

invert-binary-tree/HYUNAHKO.py

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
# Definition for a binary tree node.
2+
# class TreeNode:
3+
# def __init__(self, val=0, left=None, right=None):
4+
# self.val = val
5+
# self.left = left
6+
# self.right = right
7+
class Solution:
8+
def invertTree(self, root: Optional[TreeNode]) -> Optional[TreeNode]:
9+
if not root:
10+
return None
11+
12+
root.left, root.right = root.right, root.left
13+
14+
self.invertTree(root.left)
15+
self.invertTree(root.right)
16+
17+
return root

jump-game/HYUNAHKO.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
class Solution:
2+
def canJump(self, nums: List[int]) -> bool:
3+
max_reachable = 0
4+
last_index = len(nums) - 1
5+
6+
for i, jump_len in enumerate(nums):
7+
if i > max_reachable:
8+
return False
9+
10+
max_reachable = max(max_reachable, i + jump_len)
11+
12+
if max_reachable >= last_index:
13+
return True
14+
15+
return True
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
class Solution:
2+
def search(self, nums: List[int], target: int) -> int:
3+
left_index = 0
4+
right_index = len(nums) -1
5+
6+
while left_index <= right_index:
7+
mid_index = (left_index + right_index) // 2
8+
9+
if nums[mid_index] == target:
10+
return mid_index
11+
12+
# 왼쪽 절반 정렬 확인
13+
if (nums[left_index] <= nums[mid_index]):
14+
if (nums[left_index] <= target < nums[mid_index]):
15+
right_index = mid_index -1
16+
else:
17+
left_index = mid_index + 1
18+
19+
# 오른쪽 절반 정렬 확인
20+
else:
21+
if (nums[mid_index] < target <= nums[right_index]):
22+
left_index = mid_index + 1
23+
else:
24+
right_index = mid_index -1
25+
26+
return -1

0 commit comments

Comments
 (0)