File tree Expand file tree Collapse file tree 1 file changed +49
-0
lines changed
number-of-connected-components-in-an-undirected-graph Expand file tree Collapse file tree 1 file changed +49
-0
lines changed Original file line number Diff line number Diff line change 1+ /**
2+ * ์ฃผ์ด์ง ๋ฌด๋ฐฉํฅ ๊ทธ๋ํ์ ์ฐ๊ฒฐ๋ ์ปดํฌ๋ํธ(์ฐ๊ฒฐ ์์)์ ๊ฐ์๋ฅผ ๋ฐํํ๋ ํจ์
3+ *
4+ * @param {number } n - ๋
ธ๋์ ์
5+ * @param {number[][] } edges - ๊ฐ์ ์ ์ ๋ณด
6+ * @returns {number } - ์ฐ๊ฒฐ๋ ์ปดํฌ๋ํธ์ ๊ฐ์
7+ *
8+ * ์๊ฐ ๋ณต์ก๋: O(n)
9+ * - ๋ชจ๋ ๋
ธ๋๋ฅผ ํ ๋ฒ์ฉ ๋ฐฉ๋ฌธํ์ฌ ์ฐ๊ฒฐ๋ ์ปดํฌ๋ํธ์ ๊ฐ์๋ฅผ ๊ณ์ฐ
10+ * ๊ณต๊ฐ ๋ณต์ก๋: O(n)
11+ * - ์ธ์ ๋ฆฌ์คํธ์ ๋ฐฉ๋ฌธ ๋ฐฐ์ด ์ฌ์ฉ
12+ */
13+ function countComponents ( n : number , edges : number [ ] [ ] ) : number {
14+ // ์ธ์ ๋ฆฌ์คํธ ํํ๋ก ๊ทธ๋ํ ์์ฑ
15+ const graph : Map < number , number [ ] > = new Map ( ) ;
16+ for ( let i = 0 ; i < n ; i ++ ) {
17+ graph . set ( i , [ ] ) ;
18+ }
19+ for ( const [ a , b ] of edges ) {
20+ graph . get ( a ) ?. push ( b ) ;
21+ graph . get ( b ) ?. push ( a ) ;
22+ }
23+
24+ // ๋ฐฉ๋ฌธ ๋ฐฐ์ด ์์ฑ
25+ const visited : boolean [ ] = new Array ( n ) . fill ( false ) ;
26+ let count = 0 ;
27+
28+ // ๊น์ด ์ฐ์ ํ์ (DFS)
29+ const dfs = ( node : number ) : void => {
30+ visited [ node ] = true ;
31+ for ( const neighbor of graph . get ( node ) ! ) {
32+ if ( ! visited [ neighbor ] ) {
33+ dfs ( neighbor ) ;
34+ }
35+ }
36+ }
37+
38+ // ๋ชจ๋ ๋
ธ๋๋ฅผ ์ํํ๋ฉฐ ์์ง ๋ฐฉ๋ฌธํ์ง ์์ ๋
ธ๋๊ฐ ์์ผ๋ฉด DFS ์ํ
39+ for ( let i = 0 ; i < n ; i ++ ) {
40+ if ( ! visited [ i ] ) {
41+ // ์๋ก์ด ์ฐ๊ฒฐ ์์ ๋ฐ๊ฒฌ
42+ count ++ ;
43+ dfs ( i ) ;
44+ }
45+ }
46+
47+ return count ;
48+ }
49+
You canโt perform that action at this time.
0 commit comments