Skip to content

Commit dadf405

Browse files
committed
feat: add course schedule solution
1 parent 5746266 commit dadf405

File tree

1 file changed

+42
-0
lines changed

1 file changed

+42
-0
lines changed

course-schedule/mangodm-web.py

+42
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
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

0 commit comments

Comments
 (0)