
<접근법>
dfs 혹은 bfs를 통한 그래프의 전체 탐색을 따라가면서 중간 중간 Node를 생성하여 연결하면 된다.
<중간 문제점>
bfs 를 선택하고 정석적으로 큐를 사용하여 Queue가 빌 때까지 반복을 하는 동안 노드를 새롭게 생성하는 과정 속 에서 기존에 만들어진 노드들이 연결되지 않고 각각의 경우에 모든 노드가 다시 생성되어 전혀 연결되지 않는 문제점이 있었다.
<최종 코드>
BFS 너비 우선 탐색
class Solution {
// 시간 복잡도 O(n) 공간 복잡도 O(n)
public Node cloneGraph(Node node) {
if(node==null) return null;
Node ans = new Node(node.val);
Queue<Node> queue = new LinkedList<>();
HashMap<Integer,Node> visit = new HashMap<>();
queue.add(node);
visit.put(ans.val,ans);
// bfd 너비 우선 탐색
while(!queue.isEmpty()){
Node cur = queue.poll();
for (Node neighbor:cur.neighbors) {
if(!visit.containsKey(neighbor.val)) {
// visit를 활용하여 새로운 노드를 만들고
visit.put(neighbor.val,new Node(neighbor.val));
queue.add(neighbor);
}
// 만들어진 노드를 기존의 노드와 연결 시킴
visit.get(cur.val).neighbors.add(visit.get(neighbor.val));
}
}
return ans;
}
}
DFS 깊이 우선 탐색
import java.util.*;
class Node {
public int val;
public List<Node> neighbors;
public Node() {
val = 0;
neighbors = new ArrayList<Node>();
}
public Node(int _val) {
val = _val;
neighbors = new ArrayList<Node>();
}
public Node(int _val, ArrayList<Node> _neighbors) {
val = _val;
neighbors = _neighbors;
}
}
class Solution {
// 시간 복잡도 O(n) 공간 복잡도 O(n)
public void DFS(Node cur,HashMap<Integer,Node> visit){
for (Node neighbor:cur.neighbors) {
if(!visit.containsKey(neighbor.val)) {
// visit를 활용하여 새로운 노드를 만들고
visit.put(neighbor.val,new Node(neighbor.val));
DFS(neighbor,visit);
}
// 만들어진 노드를 기존의 노드와 연결 시킴
visit.get(cur.val).neighbors.add(visit.get(neighbor.val));
}
}
public Node cloneGraphDFS(Node node) {
if(node==null) return null;
Node ans = new Node(node.val);
HashMap<Integer,Node> visit = new HashMap<>();
visit.put(ans.val,ans);
DFS(node, visit);
return ans;
}
}'PS > Medium' 카테고리의 다른 글
| 2390. Removing Stars From a String (Stack) (0) | 2023.04.11 |
|---|---|
| 2300. Successful Pairs of Spells and Potions (이진 탐색) (0) | 2023.04.10 |
| 200. Number of Islands, 1254. Number of Closed Islands, 1020. Number of Enclaves (dfs, bfs) 문제 (0) | 2023.04.07 |
| 134. Gas Station (해석 + 풀이) (0) | 2023.01.08 |
| 1833. Maximum Ice Cream Bars (0) | 2023.01.07 |