Skip to content

Commit d2f5691

Browse files
committed
clone-graph solution
1 parent 031f8ca commit d2f5691

File tree

1 file changed

+81
-0
lines changed

1 file changed

+81
-0
lines changed

โ€Žclone-graph/jdy8738.jsโ€Ž

Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
/**
2+
* // Definition for a _Node.
3+
* function _Node(val, neighbors) {
4+
* this.val = val === undefined ? 0 : val;
5+
* this.neighbors = neighbors === undefined ? [] : neighbors;
6+
* };
7+
*/
8+
9+
/**
10+
* @param {_Node} node
11+
* @return {_Node}
12+
*/
13+
var cloneGraph = function (node) {
14+
const nodeMap = new Map();
15+
16+
const dfs = (nodeParam) => {
17+
if (!nodeParam) {
18+
return null;
19+
}
20+
21+
if (nodeMap.has(nodeParam.val)) {
22+
return nodeMap.get(nodeParam.val);
23+
}
24+
25+
const clone = new Node(nodeParam.val);
26+
27+
nodeMap.set(clone.val, clone);
28+
29+
for (const nei of nodeParam.neighbors) {
30+
clone.neighbors = [...clone.neighbors, dfs(nei)];
31+
}
32+
33+
return clone;
34+
}
35+
36+
return dfs(node);
37+
};
38+
39+
// ์žฌ๊ท€๋ฅผ ํ™œ์šฉํ•œ dfs๋ฅผ ์‚ฌ์šฉํ•œ ํ’€์ด
40+
// ์‹œ๊ฐ„๋ณต์žก๋„ O(v + e) -> v(๋…ธ๋“œ์˜ ์ˆ˜) + e(๊ฐ„์„ ์˜ ์ˆ˜) ๋งŒํผ ํƒ์ƒ‰์„ ์ˆ˜ํ–‰
41+
// ๊ณต๊ฐ„๋ณต์žก๋„ O(n) -> map์ด ์ด ๋…ธ๋“œ์˜ ์ˆ˜ ๋งŒํผ ํฌ๊ธฐ๋ฅผ ๊ฐ€์ง
42+
43+
// ------------------------------------
44+
45+
/**
46+
* @param {_Node} node
47+
* @return {_Node}
48+
*/
49+
var cloneGraph = function(node) {
50+
if (!node) {
51+
return null;
52+
}
53+
54+
const clone = new Node(node.val);
55+
56+
const clonedNodeMap = new Map().set(clone.val, clone);
57+
58+
// ์ด queue์—๋Š” ํด๋ก ์ด ์•„๋‹ˆ๋ผ ์›๋ณธ ๋…ธ๋“œ๊ฐ€ ๋“ค์–ด๊ฐ€์•ผํ•จ(neighbors์— ๋Œ€ํ•œ ์ฐธ์กฐ ๋•Œ๋ฌธ)
59+
const queue = [node];
60+
61+
while (queue.length > 0) {
62+
const currentNode = queue.pop();
63+
64+
const currentNodeClone = clonedNodeMap.get(currentNode.val);
65+
66+
for (const nei of currentNode.neighbors) {
67+
if (!clonedNodeMap.has(nei.val)) {
68+
clonedNodeMap.set(nei.val, new Node(nei.val));
69+
queue.push(nei);
70+
}
71+
72+
currentNodeClone.neighbors = [...currentNodeClone.neighbors, clonedNodeMap.get(nei.val)];
73+
}
74+
}
75+
76+
return clone;
77+
};
78+
79+
// ํ๋ฅผ ํ™œ์šฉํ•œ bfs๋ฅผ ์‚ฌ์šฉํ•œ ํ’€์ด
80+
// ์‹œ๊ฐ„๋ณต์žก๋„ O(v + e) -> v(๋…ธ๋“œ์˜ ์ˆ˜) + e(๊ฐ„์„ ์˜ ์ˆ˜) ๋งŒํผ ํƒ์ƒ‰์„ ์ˆ˜ํ–‰
81+
// ๊ณต๊ฐ„๋ณต์žก๋„ O(n) -> map์ด ์ด ๋…ธ๋“œ์˜ ์ˆ˜ ๋งŒํผ ํฌ๊ธฐ๋ฅผ ๊ฐ€์ง

0 commit comments

Comments
ย (0)