File tree Expand file tree Collapse file tree 1 file changed +42
-0
lines changed Expand file tree Collapse file tree 1 file changed +42
-0
lines changed Original file line number Diff line number Diff line change 1+ /**
2+ * [Problem]: [207] Course Schedule
3+ * (https://leetcode.com/problems/course-schedule/description/)
4+ */
5+
6+ function canFinish ( numCourses : number , prerequisites : number [ ] [ ] ) : boolean {
7+ // 시간복잡도 O(n+m)
8+ // 공간복잡도 O(n+m)
9+ function graphFunc ( numCourses : number , prerequisites : number [ ] [ ] ) : boolean {
10+ const graph : number [ ] [ ] = Array . from ( { length : numCourses } , ( ) => [ ] ) ;
11+
12+ for ( const [ course , prerequisite ] of prerequisites ) {
13+ graph [ prerequisite ] . push ( course ) ;
14+ }
15+
16+ let traversing = new Array ( numCourses ) . fill ( false ) ;
17+ let visited = new Array ( numCourses ) . fill ( false ) ;
18+
19+ function dfs ( course : number ) : boolean {
20+ if ( traversing [ course ] ) return false ;
21+ if ( visited [ course ] ) return true ;
22+
23+ traversing [ course ] = true ;
24+ for ( let pre of graph [ course ] ) {
25+ if ( ! dfs ( pre ) ) {
26+ return false ;
27+ }
28+ }
29+
30+ traversing [ course ] = false ;
31+ visited [ course ] = true ;
32+ return true ;
33+ }
34+
35+ for ( let i = 0 ; i < numCourses ; i ++ ) {
36+ if ( ! visited [ i ] && ! dfs ( i ) ) {
37+ return false ;
38+ }
39+ }
40+ return true ;
41+ }
42+ }
You can’t perform that action at this time.
0 commit comments