Skip to content

Commit c3e5de1

Browse files
committedJan 30, 2025ยทยท
solve 3
ยท
v4.15.0v3.8.0
1 parent 52cc3d5 commit c3e5de1

File tree

1 file changed

+40
-0
lines changed

1 file changed

+40
-0
lines changed
 

โ€Žclone-graph/pmjuu.py

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
'''
2+
์‹œ๊ฐ„ ๋ณต์žก๋„: O(V + E)
3+
- ๊ทธ๋ž˜ํ”„์˜ ๋ชจ๋“  ๋…ธ๋“œ๋ฅผ ํ•œ ๋ฒˆ์”ฉ ๋ฐฉ๋ฌธํ•ด์•ผ ํ•˜๋ฏ€๋กœ O(V)
4+
- ๊ฐ ๋…ธ๋“œ์˜ ๋ชจ๋“  ๊ฐ„์„ ์„ ํ•œ ๋ฒˆ์”ฉ ํƒ์ƒ‰ํ•ด์•ผ ํ•˜๋ฏ€๋กœ O(E)
5+
- ๋”ฐ๋ผ์„œ ์ „์ฒด ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” O(V + E)
6+
7+
๊ณต๊ฐ„ ๋ณต์žก๋„: O(V + E)
8+
- ํด๋ก  ๋…ธ๋“œ๋ฅผ ์ €์žฅํ•˜๋Š” ๋”•์…”๋„ˆ๋ฆฌ(clones): O(V)
9+
- BFS ํƒ์ƒ‰์„ ์œ„ํ•œ ํ(queue): O(V)
10+
- ๋ณต์ œ๋œ ๊ทธ๋ž˜ํ”„์˜ ๋…ธ๋“œ์™€ ๊ฐ„์„  ์ €์žฅ ๊ณต๊ฐ„: O(V + E)
11+
'''
12+
13+
from typing import Optional
14+
from collections import deque
15+
# Definition for a Node.
16+
class Node:
17+
def __init__(self, val = 0, neighbors = None):
18+
self.val = val
19+
self.neighbors = neighbors if neighbors is not None else []
20+
21+
class Solution:
22+
def cloneGraph(self, node: Optional['Node']) -> Optional['Node']:
23+
if not node:
24+
return None
25+
26+
clones = { node.val: Node(node.val) }
27+
queue = deque([node])
28+
29+
while queue:
30+
current_node = queue.popleft()
31+
32+
for neighbor in current_node.neighbors:
33+
# add neighbors
34+
if neighbor.val not in clones.keys():
35+
queue.append(neighbor)
36+
clones[neighbor.val] = Node(neighbor.val)
37+
38+
clones[current_node.val].neighbors.append(clones[neighbor.val])
39+
40+
return clones[node.val]

0 commit comments

Comments
 (0)
Please sign in to comment.