File tree Expand file tree Collapse file tree 1 file changed +74
-0
lines changed
number-of-connected-components-in-an-undirected-graph Expand file tree Collapse file tree 1 file changed +74
-0
lines changed Original file line number Diff line number Diff line change 1+ /**
2+ * 문제 설명
3+ * - 무방향 그래프에서 연결된 노드의 갯수를 구하는 문제
4+ *
5+ * 아이디어
6+ * 1) 그래프 생성 + DFS로 탐색
7+ * 2) Union-Find -> ⚠️ 다음에 이걸로 해보기
8+ * - 모든 노드를 자기 자신을 부모로 초기화
9+ * - 각 edge에 대해 union 연산 수행
10+ * - 최종적으로 남아있는 루트(대표 노드)의 개수가 연결 요소 수
11+ */
12+ function countComponents ( n : number , edges : number [ ] [ ] ) : number {
13+ const graph : Record < number , number [ ] > = { } ;
14+ for ( let i = 0 ; i < n ; i ++ ) graph [ i ] = [ ] ;
15+
16+ for ( const [ a , b ] of edges ) {
17+ graph [ a ] . push ( b ) ;
18+ graph [ b ] . push ( a ) ;
19+ }
20+
21+ const visited = new Set < number > ( ) ;
22+ let count = 0 ;
23+
24+ const dfs = ( node : number ) => {
25+ visited . add ( node ) ;
26+ for ( const neighbor of graph [ node ] ) {
27+ if ( ! visited . has ( neighbor ) ) {
28+ dfs ( neighbor ) ;
29+ }
30+ }
31+ } ;
32+
33+ for ( let i = 0 ; i < n ; i ++ ) {
34+ if ( ! visited . has ( i ) ) {
35+ dfs ( i ) ;
36+ count ++ ;
37+ }
38+ }
39+
40+ return count ;
41+ }
42+
43+ function countComponents2 ( n : number , edges : number [ ] [ ] ) : number {
44+ const parent = Array ( n )
45+ . fill ( 0 )
46+ . map ( ( _ , i ) => i ) ;
47+
48+ // find 함수 (경로 압축 포함)
49+ const find = ( x : number ) : number => {
50+ if ( parent [ x ] !== x ) {
51+ parent [ x ] = find ( parent [ x ] ) ;
52+ }
53+ return parent [ x ] ;
54+ } ;
55+
56+ // union 함수 (다른 집합이면 병합하고 true 반환)
57+ const union = ( x : number , y : number ) : boolean => {
58+ const rootX = find ( x ) ;
59+ const rootY = find ( y ) ;
60+ if ( rootX === rootY ) return false ;
61+ parent [ rootX ] = rootY ;
62+ return true ;
63+ } ;
64+
65+ let count = n ;
66+
67+ for ( const [ a , b ] of edges ) {
68+ if ( union ( a , b ) ) {
69+ count -- ; // 서로 다른 집합을 연결했으므로 연결 요소 수 줄임
70+ }
71+ }
72+
73+ return count ;
74+ }
You can’t perform that action at this time.
0 commit comments