Skip to content

Latest commit

Β 

History

History
33 lines (28 loc) Β· 1020 Bytes

File metadata and controls

33 lines (28 loc) Β· 1020 Bytes

Complexity

  • Time Complexity: $O(V+E)$
    • μ •μ μ˜ 수 V와 κ°„μ„ μ˜ 수 E에 λŒ€ν•΄, λͺ¨λ“  μ •μ μ˜ 수 만큼 μž¬κ·€ν˜ΈμΆœμ΄ μΌμ–΄κ±°λ‚˜ λͺ¨λ“  κ°„μ„ μ˜ 수 만큼 반볡문이 μ‹€ν–‰λ˜λ―€λ‘œ V+E 이닀.
  • Space Complexity: $O(V+E)$
    • μ •μ μ˜ 수 V와 κ°„μ„ μ˜ 수 E에 λŒ€ν•΄, λͺ¨λ“  μ •μ μ˜ 수 만큼 λ³΅μ œλ³Έλ“€μ„ μ €μž₯ν•˜λŠ” λ°°μ—΄(copied)κ°€ μ„ μ–Έλ˜κ³  λͺ¨λ“  κ°„μ„ μ˜ 수 만큼 λ°°μ—΄(Neighbors)κ°€ μ„ μ–Έλ˜λ―€λ‘œ V+E 이닀.

Code

func deepCopy(node *Node, copied map[int]*Node) *Node {
	if node == nil {
		return nil
	}
	copied[node.Val] = &Node{
		Val:       node.Val,
		Neighbors: make([]*Node, len(node.Neighbors)),
	}

	for i := 0; i < len(node.Neighbors); i++ {
		if c, found := copied[node.Neighbors[i].Val]; found {
			copied[node.Val].Neighbors[i] = c
			continue
		}
		copied[node.Val].Neighbors[i] = deepCopy(node.Neighbors[i], copied)
	}

	return copied[node.Val]
}

func cloneGraph(node *Node) *Node {
	return deepCopy(node, make(map[int]*Node, 0))
}