코딩테스트
[BFS] 10. 말단노드까지의 가장 짧은 경로
개발하는지호
2024. 2. 6. 22:02
<<풀이>>
-나의 풀이-
원래 최단 거리는 BFS로 푸는 것이 정석이다.
그렇기 이번에는 BFS를 활용해서 풀었다. while 문과 Queue를 활용해서 풀었다.
그렇게 해서 문제를 맞췄는데 !!!
내가 실수 한 것이 있었다.
그건 바로 말단 노드의 오개념이었다.
나는 말단 노드를 하나만 null이면 끊겼다고 착각했다.
하지만 하나만 null이라도 null 아닌 쪽으로 말단 노드는 더 아래로 갈 수 있는 것이다 ㅋㅋ
import java.util.LinkedList;
import java.util.Queue;
class Node {
int data;
Node lt ,rt;
Node(int val) {
data = val;
lt = rt = null;
}
}
class Main {
Node root;
private int BFS(Node root) {
Queue<Node> Q = new LinkedList<>();
Q.offer(root);
int L = 0;
while(!Q.isEmpty()) {
int size = Q.size();
for (int i = 0; i < size; i++) {
Node n = Q.poll();
if (n.lt == null || n.rt == null) return L;
else {
Q.offer(n.lt);
Q.offer(n.rt);
}
}
L++;
}
return 0;
}
public static void main(String[] args){
Main T = new Main();
T.root = new Node(1);
T.root.lt = new Node(2);
T.root.rt = new Node(3);
T.root.lt.lt = new Node(4);
T.root.lt.rt = new Node(5);
System.out.println(T.BFS(T.root));
}
}
그래서 수정한 것이 강사님 코드이다.
-강사님 풀이-
or => and 로 바꿔준 형태이다.
정답이라서 자칫 넘어가 다음에도 생길 문제를 오늘 잡아서 다행이라고 생각한다 ㅎㅎ
import java.util.LinkedList;
import java.util.Queue;
class Node {
int data;
Node lt ,rt;
Node(int val) {
data = val;
lt = rt = null;
}
}
class Main {
Node root;
private int BFS(Node root) {
Queue<Node> Q = new LinkedList<>();
Q.offer(root);
int L = 0;
while(!Q.isEmpty()) {
int size = Q.size();
for (int i = 0; i < size; i++) {
Node n = Q.poll();
if (n.lt == null && n.rt == null) return L;
else {
if(n.lt != null) Q.offer(n.lt);
if(n.rt != null) Q.offer(n.rt);
}
}
L++;
}
return 0;
}
public static void main(String[] args){
Main T = new Main();
T.root = new Node(1);
T.root.lt = new Node(2);
T.root.rt = new Node(3);
T.root.lt.lt = new Node(4);
T.root.lt.rt = new Node(5);
System.out.println(T.BFS(T.root));
}
}