Java/Baekjoon
[Baekjoon] 11725번 트리의 부모 찾기 (Java)
다콩잉
2022. 8. 28. 22:41
예제 입력1
7
1 6
6 3
3 5
4 1
2 4
4 7
예제 출력1
4
6
1
3
1
4
예제 입력2
12
1 2
1 3
2 4
3 5
3 6
4 7
4 8
5 9
5 10
6 11
6 12
예제 출력2
1
1
2
3
3
4
4
5
5
6
6
package Q11725;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.LinkedList;
import java.util.Queue;
public class Main {
static ArrayList<ArrayList<Integer>> arr;
static int[] parent;
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int num = Integer.parseInt(br.readLine());
parent = new int[num+1];
arr = new ArrayList<>();
for(int i = 0; i<=num; i++)
arr.add(new ArrayList<>());
for(int i = 0; i<num - 1; i++){
String[] st = br.readLine().split(" ");
int from = Integer.parseInt(st[0]);
int to = Integer.parseInt(st[1]);
arr.get(from).add(to); // 인덱스 from에 to 추가
arr.get(to).add(from); // 인덱스 to에 from 추가
}
bfs();
for(int i = 2; i<=num; i++)
System.out.println(parent[i]);
}
static void bfs(){
Queue<Integer> queue = new LinkedList<>();
queue.offer(1);
// offer() 삽입
// remove() = poll() 삭제
// element() = peek() 맨앞
while(!queue.isEmpty()){
int num = queue.poll(); // pop
for(int i = 0; i < arr.get(num).size(); i++){ // 인덱스num의 크기만큼 반복(연결된 노드 수)
int next = arr.get(num).get(i); // next: arr의 인덱스 num에 있는 것 중에 인덱스 i번째 있는 수
if(parent[next] == 0){ // parent 배열 인덱스 next에 아무것도 없다면
parent[next] = num; // num 추가
queue.offer(next); // 큐에 next 삽입
}
}
}
}
}
728x90