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
+ /**
2
+ * @param {number } numCourses
3
+ * @param {number[][] } prerequisites
4
+ * @return {boolean }
5
+ */
6
+ const canFinish = function ( numCourses , prerequisites ) {
7
+ // κ°μ κ° κ΄κ³ κ·Έλν μμ±
8
+ const relation = Array . from ( { length : numCourses } ) . map ( ( ) => new Set ( ) ) ;
9
+ for ( const [ current , prev ] of prerequisites ) {
10
+ relation [ current ] . add ( prev ) ;
11
+ }
12
+
13
+ const visiting = new Set ( ) ; // μκ°ν μ μλμ§ νμΈνκΈ° μν΄ μνμ€μΈ κ°μ
14
+ const visited = new Set ( ) ; // μκ° κ°λ₯ν κ°μ
15
+
16
+ function dfs ( current ) {
17
+ if ( visiting . has ( current ) ) {
18
+ return false ;
19
+ }
20
+ if ( visited . has ( current ) ) {
21
+ return true ;
22
+ }
23
+ visiting . add ( current ) ;
24
+
25
+ for ( const prev of relation [ current ] ) {
26
+ if ( visiting [ prev ] || ! dfs ( prev ) ) {
27
+ return false ;
28
+ }
29
+ }
30
+
31
+ visiting . delete ( current ) ;
32
+ visited . add ( current )
33
+
34
+ return true ;
35
+ }
36
+
37
+ // κ°μλ§λ€ μν
38
+ for ( let i = 0 ; i < numCourses ; i ++ ) {
39
+ if ( ! visited [ i ] && ! dfs ( i ) ) {
40
+ return false ;
41
+ }
42
+ }
43
+
44
+ return true ;
45
+ } ;
You canβt perform that action at this time.
0 commit comments