Skip to content

Commit eee41de

Browse files
committed
solve last 1
1 parent d7f9e15 commit eee41de

File tree

1 file changed

+45
-0
lines changed

1 file changed

+45
-0
lines changed

โ€Žgraph-valid-tree/pmjuu.pyโ€Ž

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
'''
2+
๋…ธ๋“œ์˜ ๊ฐœ์ˆ˜๋ฅผ n, ๊ฐ„์„ ์˜ ๊ฐœ์ˆ˜๋ฅผ e ๋ผ๊ณ  ํ• ๋•Œ,
3+
4+
์‹œ๊ฐ„ ๋ณต์žก๋„: O(n + e)
5+
- ๊ทธ๋ž˜ํ”„์˜ ๋ชจ๋“  ๋…ธ๋“œ์™€ ๊ฐ„์„ ์„ ๋ฐฉ๋ฌธํ•˜๋ฏ€๋กœ O(n + e)
6+
7+
๊ณต๊ฐ„ ๋ณต์žก๋„: O(n + e)
8+
- ์ธ์ ‘ ๋ฆฌ์ŠคํŠธ์™€ ๋ฐฉ๋ฌธ ๋ฐฐ์—ด์„ ์ €์žฅํ•˜๋Š” ๋ฐ O(n + e)์˜ ๊ณต๊ฐ„์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
9+
'''
10+
from typing import List
11+
12+
class Solution:
13+
def validTree(self, n: int, edges: List[List[int]]) -> bool:
14+
graph = { i: [] for i in range(n) }
15+
for u, v in edges:
16+
graph[u].append(v)
17+
graph[v].append(u)
18+
19+
visited = set()
20+
21+
def hasCycle(node, parent):
22+
if node in visited:
23+
return True
24+
25+
visited.add(node)
26+
27+
for neighbor in graph[node]:
28+
if neighbor == parent:
29+
continue # ๋ถ€๋ชจ ๋…ธ๋“œ๋กœ ๋Œ์•„๊ฐ€์ง€ ์•Š๊ธฐ
30+
if hasCycle(neighbor, node):
31+
return True
32+
33+
return False
34+
35+
# 0๋ฒˆ ๋…ธ๋“œ์—์„œ DFS ์‹œ์ž‘
36+
if hasCycle(0, -1):
37+
return False
38+
39+
# ๋ชจ๋“  ๋…ธ๋“œ๊ฐ€ ๋ฐฉ๋ฌธ๋˜์—ˆ๋Š”์ง€ ํ™•์ธ (์—ฐ๊ฒฐ์„ฑ ์ฒดํฌ)
40+
return len(visited) == n
41+
42+
# Example
43+
solution = Solution()
44+
print(solution.validTree(5, [[0, 1], [0, 2], [0, 3], [1, 4]])) # Output: True
45+
print(solution.validTree(5, [[0, 1], [1, 2], [2, 3], [1, 3], [1, 4]])) # Output: False

0 commit comments

Comments
ย (0)