[PS] Leet | 133. 그래프 복사

2025. 4. 11. 19:50·CS/PS

문제

Given a reference of a node in a connected undirected graph.

Return a deep copy (clone) of the graph.

Each node in the graph contains a value (int) and a list (List[Node]) of its neighbors.

class Node {
    public int val;
    public List<Node> neighbors;
}


Test case format:

For simplicity, each node's value is the same as the node's index (1-indexed). For example, the first node with val == 1, the second node with val == 2, and so on. The graph is represented in the test case using an adjacency list.

An adjacency list is a collection of unordered lists used to represent a finite graph. Each list describes the set of neighbors of a node in the graph.

The given node will always be the first node with val = 1. You must return the copy of the given node as a reference to the cloned graph.

예시

Example 1:

Input: adjList = [[2,4],[1,3],[2,4],[1,3]]
Output: [[2,4],[1,3],[2,4],[1,3]]
Explanation: There are 4 nodes in the graph.
1st node (val = 1)'s neighbors are 2nd node (val = 2) and 4th node (val = 4).
2nd node (val = 2)'s neighbors are 1st node (val = 1) and 3rd node (val = 3).
3rd node (val = 3)'s neighbors are 2nd node (val = 2) and 4th node (val = 4).
4th node (val = 4)'s neighbors are 1st node (val = 1) and 3rd node (val = 3).


Example 2:

Input: adjList = [[]]
Output: [[]]
Explanation: Note that the input contains one empty list. The graph consists of only one node with val = 1 and it does not have any neighbors.


Example 3:
Input: adjList = []
Output: []
Explanation: This an empty graph, it does not have any nodes.

조건

  • The number of nodes in the graph is in the range [0, 100].
  • 1 <= Node.val <= 100
  • Node.val is unique for each node.
  • There are no repeated edges and no self-loops in the graph.
  • The Graph is connected and all nodes can be visited starting from the given node.

답

일반적인 그래프 탐색(DFS, BFS)으로 해결가능합니다.

 

단, 문제에서 미리 객체가 정의되어 있기 때문에 해당 객체를 사용하여 해결해야 합니다.

 

Deep copy 이므로, 각 node 마다 edge 배열에 속한 node들을 새로운 배열에 push하여 생성합니다.

/**
 * // Definition for a _Node.
 * function _Node(val, neighbors) {
 *    this.val = val === undefined ? 0 : val;
 *    this.neighbors = neighbors === undefined ? [] : neighbors;
 * };
 */

/**
 * @param {_Node} node
 * @return {_Node}
 */
var cloneGraph = function(node) {
    if (!node) return null;

    const graphCopy = new Map();

    const dfs = (node) => {
        if (graphCopy.has(node)) return graphCopy.get(node);

        const nodeCopy = new _Node(node.val);
        graphCopy.set(node, nodeCopy);

        for (const neighbor of node.neighbors) {
            nodeCopy.neighbors.push(dfs(neighbor));
        }

        return nodeCopy;
    }

    return dfs(node);
};
728x90

'CS > PS' 카테고리의 다른 글

[PS] Leet | 128. 가장 긴 연속 수  (0) 2025.04.24
[PS] Leet | 207. 과목 스케쥴  (0) 2025.04.19
[PS] Leet | 213. 빈집 털이 II  (0) 2025.04.10
[PS] Leet | 1143. 가장 긴 공통 배열  (0) 2025.04.05
[PS] Leet | 300. 가장 긴 증가 수열  (0) 2025.04.02
'CS/PS' 카테고리의 다른 글
  • [PS] Leet | 128. 가장 긴 연속 수
  • [PS] Leet | 207. 과목 스케쥴
  • [PS] Leet | 213. 빈집 털이 II
  • [PS] Leet | 1143. 가장 긴 공통 배열
Rayi
Rayi
  • Rayi
    아카이브
    Rayi
  • 전체
    오늘
    어제
    • 분류 전체보기 (259)
      • CS (40)
        • ML (3)
        • CV (2)
        • PS (34)
      • Reveiw (17)
        • Paper (17)
        • Github (0)
      • Pytorch (5)
      • Language (58)
        • Python (7)
        • JavaScript (32)
        • TypeScript (16)
        • C++ (3)
      • IDE (12)
      • Git (13)
      • Frontend (31)
        • React (8)
        • SolidJS (20)
        • CSS (9)
      • UI (3)
      • Backend (15)
        • DB (17)
        • Node.js (11)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    PRISMA
    html
    mongo
    backend
    SOLID
    CS
    deploy
    ML
    ts
    Three
    nodejs
    PyTorch
    C++
    frontend
    Git
    ps
    js
    vscode
    postgresql
    figma
    GAN
    python
    DB
    CSS
    Express
    API
    UI
    CV
    review
    react
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.5
Rayi
[PS] Leet | 133. 그래프 복사
상단으로

티스토리툴바