File tree Expand file tree Collapse file tree 1 file changed +45
-0
lines changed Expand file tree Collapse file tree 1 file changed +45
-0
lines changed Original file line number Diff line number Diff line change
1
+ import java .util .ArrayList ;
2
+ import java .util .LinkedList ;
3
+ import java .util .List ;
4
+ import java .util .Queue ;
5
+
6
+ class Solution {
7
+
8
+ // TC: O(numCourses + E) E는 prerequisites 배열의 길이 (즉, 간선의 개수).
9
+ // SC: O(numCourses + E)
10
+ public boolean canFinish (int numCourses , int [][] prerequisites ) {
11
+ int [] inDegree = new int [numCourses ];
12
+ List <List <Integer >> adj = new ArrayList <>();
13
+
14
+ for (int i = 0 ; i < numCourses ; i ++) {
15
+ adj .add (new ArrayList <>());
16
+ }
17
+
18
+ for (int [] pre : prerequisites ) {
19
+ adj .get (pre [1 ]).add (pre [0 ]);
20
+ inDegree [pre [0 ]]++;
21
+ }
22
+
23
+ Queue <Integer > queue = new LinkedList <>();
24
+ for (int i = 0 ; i < numCourses ; i ++) {
25
+ if (inDegree [i ] == 0 ) {
26
+ queue .add (i );
27
+ }
28
+ }
29
+ for (int i = 0 ; i < numCourses ; i ++) {
30
+ if (queue .isEmpty ()) {
31
+ return false ;
32
+ }
33
+ int course = queue .poll ();
34
+
35
+ for (int nextCourse : adj .get (course )) {
36
+ inDegree [nextCourse ]--;
37
+ if (inDegree [nextCourse ] == 0 ) {
38
+ queue .add (nextCourse );
39
+ }
40
+ }
41
+ }
42
+ return queue .isEmpty ();
43
+ }
44
+ }
45
+
You can’t perform that action at this time.
0 commit comments