Skip to content

Commit 46c7a69

Browse files
committed
solve: Course Schedule
1 parent 87285cf commit 46c7a69

File tree

1 file changed

+59
-0
lines changed

1 file changed

+59
-0
lines changed

course-schedule/KwonNayeon.py

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
"""
2+
Constraints:
3+
- 1 <= numCourses <= 2000
4+
- 0 <= prerequisites.length <= 5000
5+
- prerequisites[i].length == 2
6+
- 0 <= ai, bi < numCourses
7+
- All the pairs prerequisites[i] are unique.
8+
9+
10+
Time Complexity: O(N + P)
11+
- N: numCourses, P: prerequisites의 길이
12+
13+
Space Complexity: O(N + P)
14+
- 세트의 메모리 사용량이 N과 비례하고 인접 리스트의 크기가 P
15+
16+
풀이방법:
17+
1. prerequisites을 directed graph로 변환
18+
- 각 코스별로 선수과목의 리스트를 저장함
19+
20+
2. DFS를 사용하여 cycle 존재 여부 확인
21+
- visited 배열: 이미 확인이 완료된 노드 체크
22+
- path 배열: 현재 DFS 경로에서 방문한 노드 체크
23+
24+
3. cycle이 발견되면 false, 그렇지 않으면 true 반환
25+
- 현재 경로에서 이미 방문한 노드를 다시 만나면 cycle 있음
26+
- 모든 노드 방문이 가능하면 cycle 없음
27+
"""
28+
class Solution:
29+
def canFinish(self, numCourses: int, prerequisites: List[List[int]]) -> bool:
30+
graph = [[] for _ in range(numCourses)]
31+
for course, prereq in prerequisites:
32+
graph[course].append(prereq)
33+
34+
visited = [False] * numCourses
35+
path = [False] * numCourses
36+
37+
def dfs(course):
38+
if path[course]:
39+
return False
40+
if visited[course]:
41+
return True
42+
43+
path[course] = True
44+
45+
for prereq in graph[course]:
46+
if not dfs(prereq):
47+
return False
48+
49+
path[course] = False
50+
visited[course] = True
51+
52+
return True
53+
54+
for course in range(numCourses):
55+
if not dfs(course):
56+
return False
57+
58+
return True
59+

0 commit comments

Comments
 (0)