CodingTEST
[백준 11725] 트리의 부모 찾기(JAVA)
경걍
2024. 1. 12. 10:42
반응형
백준 11725번 문제 - 트리의 부모 찾기
11725번: 트리의 부모 찾기
루트 없는 트리가 주어진다. 이때, 트리의 루트를 1이라고 정했을 때, 각 노드의 부모를 구하는 프로그램을 작성하시오.
www.acmicpc.net
문제 분석
- 트리의 루트를 1이고, 노드끼리 연결 정보를 알려준다.
- 각 노드의 부모를 구하는 프로그램을 작성하시오.
해결 포인트
- BFS 사용
- 연결 정보를 저장
- 1을 큐에 넣고 그들의 연결 정보를 알아낸다. 방문하지 않은 노드일 경우, 이 전 값을 해당 값의 부모로 저장
코드
import java.io.*;
import java.util.*;
public class Main {
public static int [] result;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int N = Integer.parseInt(br.readLine());
ArrayList<Integer> [] nears = new ArrayList[N+1];
for (int i = 1; i <= N; i++) {
nears[i] = new ArrayList<>();
}
for (int i = 0; i < N-1; i++) {
StringTokenizer st = new StringTokenizer(br.readLine());
int a = Integer.parseInt(st.nextToken());
int b = Integer.parseInt(st.nextToken());
nears[a].add(b);
nears[b].add(a);
}
result = new int[N+1];
BFS(nears, N);
for (int i = 2; i <= N; i++) {
bw.write(result[i] + "\n");
}
bw.flush();
bw.close();
}
public static void BFS(ArrayList<Integer> [] nears, int N) {
Queue<Integer> queue = new LinkedList<>();
boolean [] visit = new boolean[N+1];
visit[1] = true;
queue.add(1);
while (!queue.isEmpty()) {
int value = queue.poll();
ArrayList<Integer> near = nears[value];
for(int n : near) {
if(!visit[n]) {
result[n] = value;
visit[n] = true;
queue.add(n);
}
}
}
}
}
반응형