์šฐ๊ทœ์ด์ธ์šฐ์œค
Eager To Learn ๐ŸŒŒ
์šฐ๊ทœ์ด์ธ์šฐ์œค
์ „์ฒด ๋ฐฉ๋ฌธ์ž
์˜ค๋Š˜
์–ด์ œ

๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

  • ๐Ÿก ํ™ˆ
  • ๐Ÿš€ ๊นƒํ—ˆ๋ธŒ
  • โ›… ํƒœ๊ทธ ํด๋ผ์šฐ๋“œ
  • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (217)
    • ๐Ÿ‘จ๐Ÿป‍๐Ÿ’ป PS (170)
      • JAVA (82)
      • MYSQL (1)
      • Docker (2)
      • PYTHON (24)
      • LeetCode 150 (39)
      • Algorithm ๊ธฐ๋ฒ• (1)
      • ๋ฐ”ํ‚น๋… (21)
    • ๋ธ”๋กœ๊ทธ ์ด์‚ฌ (0)
    • Error (1)
    • CS (15)
      • DataBase (2)
      • OS (7)
      • Network (1)
      • Spring (1)
      • ์ž๋ฃŒ๊ตฌ์กฐ (3)
      • Java (1)
    • Learned (7)
      • Spring (7)
    • ๊ฐœ๋ฐœ์„œ์  (15)
      • ๊ฐ€์ƒ ๋ฉด์ ‘ ์‚ฌ๋ก€๋กœ ๋ฐฐ์šฐ๋Š” ๋Œ€๊ทœ๋ชจ ์‹œ์Šคํ…œ ์„ค๊ณ„ ๊ธฐ์ดˆ (1)
      • ์˜ค๋ธŒ์ ํŠธ - ์กฐ์˜ํ˜ธ (7)
      • ์นœ์ ˆํ•œ SQL ํŠœ๋‹ (7)
    • ํšŒ๊ณ  (2)
hELLO ยท Designed By ์ •์ƒ์šฐ.
์šฐ๊ทœ์ด์ธ์šฐ์œค

Eager To Learn ๐ŸŒŒ

๐Ÿ‘จ๐Ÿป‍๐Ÿ’ป PS/LeetCode 150

[Java] 133. Clone Graph

2023. 9. 14. 08:20

๋ฌธ์ œ ํŒŒ์•…

๋…ธ๋“œ๋กœ ์—ฐ๊ฒฐ๋œ ๊ทธ๋ž˜ํ”„๊ฐ€ ์ฃผ์–ด์ง€๊ณ , ํ•ด๋‹น ๊ทธ๋ž˜ํ”„๋ฅผ ๊นŠ์€ ๋ณต์‚ฌํ•ด์„œ ๋ฐ˜ํ™˜ํ•ด์•ผํ•œ๋‹ค.

 


ํ’€์ด

1๏ธโƒฃ bfs ๋ฅผ ์ด์šฉํ•œ ํ’€์ด

๐Ÿ’ก ๋– ์˜ค๋ฅธ Idea

๊นŠ์€ ๋ณต์‚ฌ๋ฅผ ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์–ด์ฉƒ๋“ , ๋ชจ๋“  ๋…ธ๋“œ์— ๋ฐฉ๋ฌธํ•ด๋ณด๊ณ  ํ•ด๋‹น ๊ฐ’์„ ๊ฐ–๋Š” ์ƒˆ๋กœ์šด ๋…ธ๋“œ๋ฅผ ์ƒ์„ฑํ•ด์•ผํ•œ๋‹ค.

๋ฌธ์ œ์—์„œ val ๊ฐ’์€ unique ํ•˜๋‹ค๊ณ  ํ–ˆ์œผ๋ฏ€๋กœ map์— val ์„ ํ‚ค๊ฐ’์œผ๋กœ ํ•ด์„œ ๋…ธ๋“œ๋ฅผ ์ฐธ์กฐํ•ด์ค€๋‹ค.

์ฒซ๋ฒˆ์งธ ๋…ธ๋“œ๋ถ€ํ„ฐ ์ด์›ƒ ๋…ธ๋“œ๋“ค์— ๋ฐฉ๋ฌธํ•ด๋ณด๊ณ , map์— ๋“ค์–ด์žˆ์ง€ ์•Š์€(์•„์ง ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์€) ๋…ธ๋“œ๋“ค์€ ํ์— ์ง‘์–ด๋„ฃ์–ด ์ด์›ƒ ๋…ธ๋“œ๋“ค์— ๋ฐฉ๋ฌธํ•˜๊ธฐ๋ฅผ ๋ฐ˜๋ณตํ•œ๋‹ค.

๋งŒ์•ฝ map์— ๋“ค์–ด์žˆ๋Š”(๋ฐฉ๋ฌธํ–ˆ๋˜) ๋…ธ๋“œ๋ผ๋ฉด ํ์— ๋„ฃ์ง€ ์•Š๊ณ  ์ด์›ƒ์œผ๋กœ์„œ ์ถ”๊ฐ€๋งŒ ํ•ด์ค€๋‹ค.

 

 

class Solution {
    Map<Integer, Node> map = new HashMap<>();
    Queue<Node> q = new LinkedList<>();

    public Node cloneGraph(Node node) {
        if (node == null) {
            return null;
        }

        Node copied = new Node(node.val);
        map.put(copied.val, copied);

        q.offer(node);

        while (!q.isEmpty()) {
            Node poll = q.poll();

            for (Node n : poll.neighbors) {
                if (!map.containsKey(n.val)) {
                    Node newNode = new Node(n.val);
                    map.put(n.val, newNode);
                    q.offer(n);
                }

                map.get(poll.val).neighbors.add(map.get(n.val));
            }
        }

        return copied;

    }
}

 

 

๊ฒฐ๊ณผ

 

 

2๏ธโƒฃ dfs๋ฅผ ์ด์šฉํ•œ ํ’€์ด

๐Ÿ’ก ๋– ์˜ค๋ฅธ Idea

bfs์™€ ์œ ์‚ฌํ•˜๋‹ค. dfs๋ฅผ ์ด์šฉํ•ด์„œ ๋ชจ๋“  ๋…ธ๋“œ์— ๋ฐฉ๋ฌธํ•˜๊ณ  ์ด์›ƒ๋“ค์„ ๋ณต์‚ฌํ•ด์ฃผ๋ฉด ๋œ๋‹ค.

 

class Solution {
    Map<Integer, Node> map = new HashMap<>();

    public Node cloneGraph(Node node) {
        if (node == null) {
            return null;
        }

        Node copied = new Node(node.val);
        map.put(copied.val, copied);

        dfs(node);

        return copied;
    }

    private void dfs(Node node) {
        for (Node n : node.neighbors) {
            if (!map.containsKey(n.val)) {
                Node newNode = new Node(n.val);
                map.put(newNode.val, newNode);
                dfs(n);
            }

            map.get(node.val).neighbors.add(map.get(n.val));
        }
    }
}

 

๊ฒฐ๊ณผ


๐Ÿ“– ํšŒ๊ณ 

๋…ธ๋“œ ํด๋ž˜์Šค๋กœ bfs ์™€ dfs๋ฅผ ๊ตฌํ˜„ํ•˜๋Š”๊ฒŒ ์ฒ˜์Œ์—๋Š” ์–ด์ƒ‰ํ•˜๊ณ  ํž˜๋“ค์—ˆ๋Š”๋ฐ,

 

๊ฒฐ๊ตญ์—๋Š” ์›๋ฆฌ๋ฅผ ์ž˜ ํŒŒ์•…ํ•ด์„œ ๊ทธ๋Œ€๋กœ ๊ตฌํ˜„ํ•˜๋ฉด ์›ํ•˜๋Š” ๊ฒฐ๊ณผ๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ์—ˆ๋‹ค.

 

๊ด€๋ จ ๋ฌธ์ œ๋ฅผ ๋งŽ์ด ํ’€์–ด๋ด์•ผ๊ฒ ๋‹ค๋Š” ์ƒ๊ฐ์ด ๋“ค์—ˆ๋‹ค.

    '๐Ÿ‘จ๐Ÿป‍๐Ÿ’ป PS/LeetCode 150' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
    • [Java] 909. Snakes and Ladders
    • [Java] 373. Find K Pairs with Smallest Sums
    • [Java] 215. Kth Largest Element in an Array
    • [Java] 212. Word Search II
    ์šฐ๊ทœ์ด์ธ์šฐ์œค
    ์šฐ๊ทœ์ด์ธ์šฐ์œค
    ๊ฐœ๋ฐœ์ž ๊ฟˆ๋‚˜๋ฌด

    ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”