Skip to content

Commit f62904d

Browse files
committed
add solution : 133. Clone Graph
1 parent d9b9c42 commit f62904d

File tree

1 file changed

+48
-0
lines changed

1 file changed

+48
-0
lines changed

โ€Žclone-graph/mmyeon.ts

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
class _Node {
2+
val: number;
3+
neighbors: _Node[];
4+
constructor(val?: number, neighbors?: _Node[]) {
5+
this.val = val === undefined ? 0 : val;
6+
this.neighbors = neighbors === undefined ? [] : neighbors;
7+
}
8+
}
9+
10+
/**
11+
* @link https://leetcode.com/problems/clone-graph/description/
12+
*
13+
* ์ ‘๊ทผ ๋ฐฉ๋ฒ• :
14+
* - ์—ฃ์ง€ ์ผ€์ด์Šค : ์ฃผ์–ด์ง„ ๋…ธ๋“œ๊ฐ€ null์ด๋ฉด ๊ทธ๋Œ€๋กœ ๋ฆฌํ„ด
15+
* - ์ด๋ฏธ ๋ฐฉ๋ฌธํ•œ ๋…ธ๋“œ์ธ์ง€ ํ™•์ธ : ๋ฐฉ๋ฌธํ•œ ๋…ธ๋“œ์ธ ๊ฒฝ์šฐ, ์ €์žฅ๋œ ๋ณต์‚ฌ ๋…ธ๋“œ ๋ฆฌํ„ดํ•ด์„œ ์ค‘๋ณต ์ƒ์„ฑ ๋ฐฉ์ง€
16+
* - ์ƒˆ๋กœ์šด ๋…ธ๋“œ ํด๋ก ํ•˜๊ณ  visited ๋งต์— ์ €์žฅ
17+
* - ํ•ด๋‹น ๋…ธ๋“œ์˜ ์ด์›ƒ ๋…ธ๋“œ๋„ ์ˆœํšŒํ•˜๋ฉด์„œ ๋ณต์ œ
18+
* - ํด๋ก ๋œ ๋…ธ๋“œ ๋ฆฌํ„ด
19+
*
20+
* ์‹œ๊ฐ„๋ณต์žก๋„ : O(n + e)
21+
* - n์€ ๋…ธ๋“œ์˜ ๊ฐœ์ˆ˜, e๋Š” ๋…ธ๋“œ ์—ฐ๊ฒฐํ•˜๋Š” ์—ฃ์ง€์˜ ๊ฐœ์ˆ˜
22+
* - ๋ชจ๋“  ๋…ธ๋“œ ์ˆœํšŒํ•˜๋ฉด์„œ ๊ฐ ๋…ธ๋“œ์˜ ์ด์›ƒ ํƒ์ƒ‰
23+
*
24+
* ๊ณต๊ฐ„๋ณต์žก๋„ : O(n)
25+
* - ๋ชจ๋“  ๋…ธ๋“œ๋ฅผ ํด๋ก ํ•ด์„œ visited ๋งต์— ์ €์žฅ๋˜๋ฏ€๋กœ O(n)
26+
* - ๊ทธ๋ž˜ํ”„๊ฐ€ ์„ ํ˜• ๊ตฌ์กฐ์ธ ์ตœ์•…์˜ ๊ฒฝ์šฐ, ์žฌ๊ท€ ํ˜ธ์ถœ ์Šคํƒ์ด O(n)
27+
*/
28+
function cloneGraph(node: _Node | null): _Node | null {
29+
if (!node) return null;
30+
const visited = new Map<number, _Node>();
31+
32+
const cloneNode = (node: _Node): _Node => {
33+
if (visited.has(node.val)) return visited.get(node.val) as _Node;
34+
35+
const clonedNode = new _Node(node.val);
36+
visited.set(node.val, clonedNode);
37+
38+
for (const neighbor of node.neighbors) {
39+
const clonedNeighbor = cloneNode(neighbor);
40+
41+
clonedNode.neighbors.push(clonedNeighbor);
42+
}
43+
44+
return clonedNode;
45+
};
46+
47+
return cloneNode(node);
48+
}

0 commit comments

Comments
ย (0)