File tree Expand file tree Collapse file tree 1 file changed +50
-0
lines changed
number-of-connected-components-in-an-undirected-graph Expand file tree Collapse file tree 1 file changed +50
-0
lines changed Original file line number Diff line number Diff line change 1+ /**
2+ *@link https://leetcode.com/problems/number-of-connected-components-in-an-undirected-graph
3+ *
4+ * 접근 방법 : DFS 사용
5+ * - 그래프를 인접 리스트로 저장
6+ * - DFS 사용해서 연결된 모든 노드 방문 처리
7+ * -방문하지 않은 노드 발견 시 count 증가
8+ *
9+ * 시간복잡도 : O(n + e)
10+ * - n = 노드 개수, e = 엣지 개수
11+ * - 모든 노드 순회해서 dfs 실행 : O(n)
12+ * - edges 순회해서 graph 생성 : O(e)
13+ *
14+ * 공간복잡도 : O(n + e)
15+ * - 노드와 인접된 리스트 저장 : O(n + e)
16+ */
17+
18+ function countComponents ( n : number , edges : number [ ] [ ] ) : number {
19+ const graph = new Map < number , number [ ] > ( ) ;
20+
21+ for ( let i = 0 ; i < n ; i ++ ) {
22+ graph . set ( i , [ ] ) ;
23+ }
24+
25+ for ( const [ node1 , node2 ] of edges ) {
26+ graph . get ( node1 ) ! . push ( node2 ) ;
27+ graph . get ( node2 ) ! . push ( node1 ) ;
28+ }
29+
30+ const visited : boolean [ ] = Array ( n ) . fill ( false ) ;
31+
32+ function dfs ( node : number ) {
33+ // 방문한 노드 처리
34+ visited [ node ] = true ;
35+ for ( const neighbor of graph . get ( node ) || [ ] ) {
36+ if ( ! visited [ neighbor ] ) dfs ( neighbor ) ;
37+ }
38+ }
39+
40+ let count = 0 ;
41+ for ( let node = 0 ; node < n ; node ++ ) {
42+ // 처음 방문하는 노드인 경우
43+ if ( ! visited [ node ] ) {
44+ count ++ ;
45+ dfs ( node ) ;
46+ }
47+ }
48+
49+ return count ;
50+ }
You can’t perform that action at this time.
0 commit comments