File tree Expand file tree Collapse file tree 1 file changed +37
-0
lines changed Expand file tree Collapse file tree 1 file changed +37
-0
lines changed Original file line number Diff line number Diff line change
1
+ /**
2
+ * λ¬Έμ ν΄μ€
3
+ * - κ·Έλνμ μ¬μ΄ν΄μ΄ μλμ§ μλμ§ νμΈνλ λ¬Έμ
4
+ *
5
+ * μμ΄λμ΄
6
+ * 1) κ·Έλν νμ -> DFS, BFS
7
+ * - κ·Έλνλ₯Ό νμνλ©° μ¬μ΄ν΄μ΄ μλμ§ μλμ§ νμΈνλ€.
8
+ * - νμ¬ κ²½λ‘μ μ΄λ―Έ λ°©λ¬Έν λ
Έλλ₯Ό λ€μ λ§λλ©΄ μ¬μ΄ν΄ λ°μ. = 1
9
+ */
10
+
11
+ function canFinish ( numCourses : number , prerequisites : number [ ] [ ] ) : boolean {
12
+ const graph = new Map < number , number [ ] > ( ) ;
13
+ const visited : number [ ] = new Array ( numCourses ) . fill ( 0 ) ; // 0: μ λ€λ
μ΄, 1: μ¬μ΄ν΄ νμΈ μ¦(λ°©λ¬Έ μ€), 2: μ¬μ΄ν΄ μμ νμΈ μλ£
14
+
15
+ // κ·Έλν μμ±
16
+ for ( const [ course , preCourse ] of prerequisites ) {
17
+ if ( ! graph . has ( course ) ) graph . set ( course , [ ] ) ;
18
+ graph . get ( course ) ! . push ( preCourse ) ;
19
+ }
20
+
21
+ function hasCycle ( index : number ) {
22
+ if ( visited [ index ] === 1 ) return true ;
23
+ if ( visited [ index ] === 2 ) return false ;
24
+
25
+ visited [ index ] = 1 ;
26
+ for ( const preCourse of graph . get ( index ) || [ ] ) {
27
+ if ( hasCycle ( preCourse ) ) return true ;
28
+ }
29
+ visited [ index ] = 2 ;
30
+ return false ;
31
+ }
32
+
33
+ for ( let i = 0 ; i < numCourses ; i ++ ) {
34
+ if ( hasCycle ( i ) ) return false ;
35
+ }
36
+ return true ;
37
+ }
You canβt perform that action at this time.
0 commit comments