Skip to content

Commit a99c988

Browse files
week9 mission - Course Schedule
1 parent c93bf82 commit a99c988

File tree

1 file changed

+64
-0
lines changed

1 file changed

+64
-0
lines changed
Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
- 문제: https://leetcode.com/problems/course-schedule/
2+
- 풀이: https://algorithm.jonghoonpark.com/2024/03/01/leetcode-207
3+
4+
```java
5+
public class Solution {
6+
public boolean canFinish(int numCourses, int[][] prerequisites) {
7+
if (prerequisites.length == 0) {
8+
return true;
9+
}
10+
11+
Map<Integer, Node> vertexMap = new HashMap<>();
12+
13+
for (int[] prerequisite : prerequisites) {
14+
vertexMap.putIfAbsent(prerequisite[0], new Node(prerequisite[0]));
15+
vertexMap.putIfAbsent(prerequisite[1], new Node(prerequisite[1]));
16+
17+
Node vertex1 = vertexMap.get(prerequisite[0]);
18+
Node vertex2 = vertexMap.get(prerequisite[1]);
19+
20+
vertex1.edges.add(vertex2);
21+
vertex2.reversedEdges.add(vertex1);
22+
}
23+
24+
Deque<Integer> deque = new LinkedList<>();
25+
26+
int[] degrees = new int[numCourses];
27+
for (int i = 0; i < degrees.length; i++) {
28+
Node vertex = vertexMap.get(i);
29+
if (vertex != null) {
30+
degrees[i] = vertex.edges.size();
31+
if (degrees[i] == 0) {
32+
deque.addLast(i);
33+
}
34+
}
35+
}
36+
37+
while(!deque.isEmpty()) {
38+
int vertexId = deque.removeFirst();
39+
Node vertex = vertexMap.get(vertexId);
40+
for (Node node : vertex.reversedEdges) {
41+
degrees[node.id]--;
42+
if (degrees[node.id] == 0) {
43+
deque.addLast(node.id);
44+
}
45+
}
46+
vertexMap.remove(vertexId);
47+
}
48+
49+
return vertexMap.isEmpty();
50+
}
51+
}
52+
53+
class Node {
54+
int id;
55+
List<Node> edges;
56+
List<Node> reversedEdges;
57+
58+
public Node(int id) {
59+
this.id = id;
60+
edges = new ArrayList<>();
61+
reversedEdges = new ArrayList<>();
62+
}
63+
}
64+
```

0 commit comments

Comments
 (0)