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