File tree Expand file tree Collapse file tree 1 file changed +41
-0
lines changed Expand file tree Collapse file tree 1 file changed +41
-0
lines changed Original file line number Diff line number Diff line change
1
+ /**
2
+ * ๋ฌธ์ ์ค๋ช
3
+ * - ์ฃผ์ด์ง ๊ฐ์ ์ ๋ณด๋ก ํธ๋ฆฌ๊ฐ ๋ง๋ค์ด์ง๋์ง ํ์ธํ๋ ๋ฌธ์
4
+ * - ์ด๋ ค์ ์ ๋ค์ ํ์ด๋ณด๊ธฐ โ ๏ธ
5
+ *
6
+ * ํธ๋ฆฌ์ ์กฐ๊ฑด
7
+ * 1) ๋ชจ๋ ๋
ธ๋๊ฐ ์ฐ๊ฒฐ๋์ด ์์ด์ผ ํ๋ค.
8
+ * 2) ์ฌ์ดํด์ด ์์ด์ผ ํ๋ค.
9
+ * 3) ์ด ๊ฐ์ ์ ๊ฐฏ์๋ n-1๊ฐ์ฌ์ผ ํ๋ค.
10
+ *
11
+ * ์์ด๋์ด
12
+ * 1) Union-Find (Disjoint Set)
13
+ * 2) DFS โ
14
+ */
15
+ function validTree ( n , edges ) {
16
+ if ( edges . length !== n - 1 ) return false ; // ๊ฐ์ ์๊ฐ n - 1์ด ์๋๋ฉด ํธ๋ฆฌ ๋ถ๊ฐ
17
+
18
+ const graph = Array . from ( { length : n } , ( ) => [ ] ) ;
19
+ for ( const [ a , b ] of edges ) {
20
+ graph [ a ] . push ( b ) ;
21
+ graph [ b ] . push ( a ) ;
22
+ }
23
+
24
+ const visited = new Set ( ) ;
25
+
26
+ const dfs = ( node , prev ) => {
27
+ if ( visited . has ( node ) ) return false ;
28
+ visited . add ( node ) ;
29
+
30
+ for ( const neighbor of graph [ node ] ) {
31
+ if ( neighbor === prev ) continue ; // ๋ฐ๋ก ์ด์ ๋
ธ๋๋ ๋ฌด์, ์ฒดํฌํ๋ ์ด์ : ๋ฌด๋ฐฉํฅ ๊ทธ๋ํ์ด๊ธฐ ๋๋ฌธ์ ์ฌ์ดํด๋ก ๋ค์ด๊ฐ๊ฒ ํ์ง ์๊ธฐ ์ํจ.
32
+ if ( ! dfs ( neighbor , node ) ) return false ; // ์ฌ์ดํด ๋ฐ์
33
+ }
34
+
35
+ return true ;
36
+ } ;
37
+
38
+ if ( ! dfs ( 0 , - 1 ) ) return false ;
39
+
40
+ return visited . size === n ;
41
+ }
You canโt perform that action at this time.
0 commit comments