File tree 1 file changed +42
-0
lines changed
1 file changed +42
-0
lines changed Original file line number Diff line number Diff line change
1
+ from typing import List
2
+
3
+
4
+ class Solution :
5
+ def canFinish (self , numCourses : int , prerequisites : List [List [int ]]) -> bool :
6
+ """
7
+ - Idea: 각 과목의 선행 과목에 사이클이 존재하는지 DFS로 탐색한다.
8
+ 하나라도 사이클이 존재한다면, 모든 과목을 수강할 수 없다는 의미다.
9
+ - Time Complexity: O(v + e). v와 e는 각각 과목의 수, e는 선행 관계(과목 => 선행 과목)의 수다.
10
+ 모든 과목과 그 과목의 선행 과목을 탐색해야 하기 때문에 각 노드와 엣지에 대해 한번씩 방문해야 한다.
11
+ - Space Complexity: O(v). v는 과목의 수다.
12
+ 각 과목에 대해서 그래프(선행 관계)를 저장하고, 재귀 호출 스택에 의해 공간이 사용된다.
13
+ """
14
+
15
+ graph = {i : [] for i in range (numCourses )}
16
+
17
+ for course , prerequisite in prerequisites :
18
+ graph [course ].append (prerequisite )
19
+
20
+ visited = set ()
21
+
22
+ def DFS (course ):
23
+ if course in visited :
24
+ return False
25
+ if graph [course ] == []:
26
+ return True
27
+
28
+ visited .add (course )
29
+ for prerequisite in graph [course ]:
30
+ if not DFS (prerequisite ):
31
+ return False
32
+
33
+ visited .remove (course )
34
+ graph [course ] = []
35
+
36
+ return True
37
+
38
+ for course in range (numCourses ):
39
+ if not DFS (course ):
40
+ return False
41
+
42
+ return True
You can’t perform that action at this time.
0 commit comments