File tree Expand file tree Collapse file tree 1 file changed +56
-0
lines changed Expand file tree Collapse file tree 1 file changed +56
-0
lines changed Original file line number Diff line number Diff line change 1+ """
2+ 풀이 :
3+ valid tree를 만족하려면 두 가지 조건이 필요하다
4+
5+ 1. 순환이 없어야 한다
6+ 2. 모든 노드가 연결되어 있어야한다
7+
8+ 이 조건을 만족하려면 (vertex 수 - 1) == edge 수 가 필수조건이다
9+ edge 수가 더 적다면 모든 노드가 연결되지 않고 더 많다면 필연적으로 순환이 존재하기 때문
10+ 위 조건으로 필터링하고 나서 모든 노드가 연결됐는지지 확인하면 valid tree를 알 수 있다
11+ 즉, 순환을 가지고 있는지 확인하는 과정이 생략된다
12+
13+ - edges를 기반으로 graph를 만든다
14+
15+ 노드 개수: N, 간선 개수: E
16+ E == N - 1을 먼저 확인하기 때문에 E는 N에 비례한다
17+ 따라서 N만 사용
18+
19+ TC: O(N)
20+ 모든 node에 대해 dfs호출, edges에 대한 순회도 node수에 비례
21+
22+ SC: O(N)
23+ dfs 호출 스택 및 graph는 node 수에 비례
24+ """
25+
26+ from typing import (
27+ List ,
28+ )
29+
30+ class Solution :
31+ """
32+ @param n: An integer
33+ @param edges: a list of undirected edges
34+ @return: true if it's a valid tree, or false
35+ """
36+ def valid_tree (self , n : int , edges : List [List [int ]]) -> bool :
37+ # write your code here
38+ if n - 1 != len (edges ) :
39+ return False
40+
41+ graph = [[] for _ in range (n )]
42+ for node , adjcent in edges :
43+ graph [node ].append (adjcent )
44+ graph [adjcent ].append (node )
45+
46+ visited = set ()
47+
48+ def dfs (node ):
49+ visited .add (node )
50+ for adj in graph [node ]:
51+ if adj not in visited :
52+ dfs (adj )
53+
54+ dfs (0 )
55+
56+ return len (visited ) == n
You can’t perform that action at this time.
0 commit comments