Skip to content

Commit a88453c

Browse files
update post
1 parent c92ff77 commit a88453c

File tree

1 file changed

+68
-0
lines changed

1 file changed

+68
-0
lines changed

_posts/2024-03-01-leetcode-207.md

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -149,3 +149,71 @@ return len(ans) == n
149149
```
150150

151151
false를 반환했다는 것은 이건 주어진 prerequisite(선수 과목)에 오류(순환)가 있다는 뜻이다.
152+
153+
## java로 다시 풀기 (24.06.30)
154+
155+
```java
156+
public class Solution {
157+
public boolean canFinish(int numCourses, int[][] prerequisites) {
158+
if (prerequisites.length == 0) {
159+
return true;
160+
}
161+
162+
Map<Integer, Node> vertexMap = new HashMap<>();
163+
for (int[] prerequisite : prerequisites) {
164+
vertexMap.putIfAbsent(prerequisite[0], new Node(prerequisite[0]));
165+
vertexMap.putIfAbsent(prerequisite[1], new Node(prerequisite[1]));
166+
167+
Node vertex1 = vertexMap.get(prerequisite[0]);
168+
Node vertex2 = vertexMap.get(prerequisite[1]);
169+
170+
vertex1.edges.add(vertex2);
171+
vertex2.reversedEdges.add(vertex1);
172+
}
173+
174+
Deque<Integer> deque = new LinkedList<>();
175+
176+
int[] degrees = new int[numCourses];
177+
for (int i = 0; i < degrees.length; i++) {
178+
Node vertex = vertexMap.get(i);
179+
if (vertex != null) {
180+
degrees[i] = vertex.edges.size();
181+
if (degrees[i] == 0) {
182+
deque.addLast(i);
183+
}
184+
}
185+
}
186+
187+
while(!deque.isEmpty()) {
188+
int vertexId = deque.removeFirst();
189+
Node vertex = vertexMap.get(vertexId);
190+
for (Node node : vertex.reversedEdges) {
191+
degrees[node.id]--;
192+
if (degrees[node.id] == 0) {
193+
deque.addLast(node.id);
194+
}
195+
}
196+
vertexMap.remove(vertexId);
197+
}
198+
199+
return vertexMap.isEmpty();
200+
}
201+
}
202+
203+
class Node {
204+
int id;
205+
List<Node> edges;
206+
List<Node> reversedEdges;
207+
208+
public Node(int id) {
209+
this.id = id;
210+
edges = new ArrayList<>();
211+
reversedEdges = new ArrayList<>();
212+
}
213+
}
214+
```
215+
216+
### TC, SC
217+
218+
node(vertex)의 수를 `V`, edge의 수를 `E` 라고 하였을 때
219+
시간 복잡도는 `O(V + E)` 이다. 공간 복잡도는 `O(V + E)`이다.

0 commit comments

Comments
 (0)