Skip to content

Commit afe3250

Browse files
author
แ„‹แ…ตแ„‹แ…งแ†ซแ„‰แ…ฎ
committed
clone graph
1 parent 2379b42 commit afe3250

File tree

1 file changed

+47
-0
lines changed

1 file changed

+47
-0
lines changed

โ€Žclone-graph/EcoFriendlyAppleSu.kt

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
package leetcode_study
2+
3+
/*
4+
* Graph Node ๋ณต์‚ฌ ๋ฌธ์ œ
5+
* queue๋ฅผ ์‚ฌ์šฉํ•ด ๋ฌธ์ œ ํ•ด๊ฒฐ
6+
* ์ƒˆ๋กœ ์ƒ์„ฑํ•œ Node์— ๋Œ€ํ•ด ๋ฐฉ๋ฌธ์ฒ˜๋ฆฌ๋ฅผ ํ•˜์ง€ ์•Š์„ ๊ฒฝ์šฐ ๋ฌดํ•œ Loop์— ๋น ์ง€๊ฒŒ๋จ -> ๊ฐ ๋…ธ๋“œ๊ฐ€ ์–‘๋ฐฉํ–ฅ์„ ๊ฐ€๋ฆฌํ‚ค๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ.
7+
* ๋”ฐ๋ผ์„œ, Map ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ์‚ฌ์šฉํ•ด Map<๊ธฐ์กด Node, ๋ณต์‚ฌ Node>์˜ ๋ชจ์Šต์œผ๋กœ Key-Value ์Œ์œผ๋กœ ๋ฐฉ๋ฌธ์ฒ˜๋ฆฌ๋ฅผ ํ‘œํ˜„
8+
*
9+
* ์‹œ๊ฐ„ ๋ณต์žก๋„: O(n)
10+
* -> graph์˜ Node๋ฅผ ํ•œ ๋ฒˆ์”ฉ ๋ฐฉ๋ฌธํ•˜์—ฌ ๋ณต์‚ฌํ•˜๋Š” ๊ณผ์ •: O(n)
11+
* ๊ณต๊ฐ„ ๋ณต์žก๋„:
12+
* -> ๋ณต์‚ฌ๋œ Node๋ฅผ ๋งคํ•‘ํ•˜๋Š” Map ์ž๋ฃŒ๊ตฌ์กฐ์˜ ํฌ๊ธฐ: O(n)
13+
* -> BFS๋ฅผ ์‚ฌ์šฉํ•œ queue size: O(n)
14+
* -> ์ƒˆ๋กœ ์ƒ์„ฑ๋œ Node์˜ neighbor list: O(n)
15+
* */
16+
fun cloneGraph(node: Node?): Node? {
17+
if (node == null) return null
18+
if (node.neighbors.isEmpty()) return Node(1)
19+
20+
// Map< ๊ธฐ์กด Node, ๋ณต์‚ฌ Node>
21+
val nodeMap = mutableMapOf<Node, Node>()
22+
23+
val queue = ArrayDeque<Node>()
24+
queue.add(node)
25+
nodeMap[node] = Node(node.`val`)
26+
27+
while (queue.isNotEmpty()) {
28+
val current = queue.removeFirst()
29+
val clonedNode = nodeMap[current]!! // ํ˜„์žฌ ๋…ธ๋“œ์˜ ๋ณต์ œ๋ณธ
30+
31+
for (neighbor in current.neighbors) {
32+
if (neighbor == null) continue
33+
34+
// ํ•ด๋‹น ์ด์›ƒ์ด ์•„์ง ๋ณต์‚ฌ๋˜์ง€ ์•Š์•˜๋‹ค๋ฉด ๋ณต์‚ฌํ•˜์—ฌ ๋งต์— ์ €์žฅํ•˜๊ณ  ํ์— ์ถ”๊ฐ€
35+
if (!nodeMap.containsKey(neighbor)) {
36+
nodeMap[neighbor] = Node(neighbor.`val`)
37+
queue.add(neighbor)
38+
}
39+
40+
// ๋ณต์ œ๋œ ํ˜„์žฌ ๋…ธ๋“œ์˜ ์ด์›ƒ ๋ฆฌ์ŠคํŠธ์— ๋ณต์ œ๋œ ์ด์›ƒ ๋…ธ๋“œ๋ฅผ ์ถ”๊ฐ€
41+
// ์–‘๋ฐฉํ–ฅ์„ ๋”ฐ์งˆ ํ•„์š” ์—†์ด ๋‚ด๋ถ€ neighbor node list์— ๋ชจ๋“  ๋…ธ๋“œ๊ฐ€ ์žˆ์Œ
42+
clonedNode.neighbors.add(nodeMap[neighbor])
43+
}
44+
}
45+
return nodeMap[node]
46+
}
47+

0 commit comments

Comments
ย (0)