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