코딩 테스트 및 알고리즘/leetcode for google

leetcode medium : Clone Graph (Grind 75 Graph 문제 3)

띠리링구 2023. 2. 24. 02:48

예전에 풀어본 문제다.

근데 또 실수했다.

이 문제는 지금 카피되어 결과물로 나오고 있는 그래프를 어떻게 관리할거냐가 핵심인데

각 노드의 값이 유니크하다는 점을 이용해 hash map을 이용하면 된다.

그럼 source graph에서 어떤 노드가 주어지면 그 값을 이용해 대응되는 destination graph의 값을 찾을 수 있다.

 

class Solution:
    def cloneGraph(self, node: 'Node') -> 'Node':
        if not node: return None
        q, nodemap = deque([node]), {node.val : Node(node.val)}
        while q:
            src = q.popleft()
            for n in src.neighbors:
                if n.val not in nodemap:
                    nodemap[n.val] = Node(n.val)
                    q.append(n)
                nodemap[src.val].neighbors.append(nodemap[n.val])
        return nodemap[node.val]

 

복잡도는

시간 : O(N)

공간 : O(N) (한 노드에 다른 모든 노드가 붙어있는 경우 큐가 N에 비례해서 찬다.)