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