๋ฌธ์ ํ์
๋ ธ๋๋ก ์ฐ๊ฒฐ๋ ๊ทธ๋ํ๊ฐ ์ฃผ์ด์ง๊ณ , ํด๋น ๊ทธ๋ํ๋ฅผ ๊น์ ๋ณต์ฌํด์ ๋ฐํํด์ผํ๋ค.
ํ์ด
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๋ฅผ ๊ตฌํํ๋๊ฒ ์ฒ์์๋ ์ด์ํ๊ณ ํ๋ค์๋๋ฐ,
๊ฒฐ๊ตญ์๋ ์๋ฆฌ๋ฅผ ์ ํ์ ํด์ ๊ทธ๋๋ก ๊ตฌํํ๋ฉด ์ํ๋ ๊ฒฐ๊ณผ๋ฅผ ์ป์ ์ ์์๋ค.
๊ด๋ จ ๋ฌธ์ ๋ฅผ ๋ง์ด ํ์ด๋ด์ผ๊ฒ ๋ค๋ ์๊ฐ์ด ๋ค์๋ค.