File tree Expand file tree Collapse file tree
search-in-rotated-sorted-array Expand file tree Collapse file tree Original file line number Diff line number Diff line change 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
Original file line number Diff line number Diff line change 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
Original file line number Diff line number Diff line change 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
Original file line number Diff line number Diff line change 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
You can’t perform that action at this time.
0 commit comments