코딩 테스트
(Java) 백준 11725 - 트리의 부모 찾기
로승리
2022. 8. 1. 18:03
문제를 풀다 보니 트리에 약점이 있는 것 같아 트리 문제를 풀어보았다.
문제 이해가 좀 어려웠다. 문제에 어떤 트리인지 특정하지 않아서 생각하기 더 어려웠나?
인접 행렬이나 인접 리스트를 만들면 탐색은 금방 할 것 같았는데 인접 리스트를 만드는 게 어려웠다.
트리 문제를 더 풀어봐야겠다.
최종 코드
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.*;
public class Main {
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
int n = Integer.parseInt(br.readLine());
int[] parent = new int[n + 1];
boolean[] visited = new boolean[n + 1];
// 인접 리스트 만들기
List<ArrayList<Integer>> list = new ArrayList<>();
for (int i = 0; i < n + 1; i++) {
list.add(new ArrayList());
}
// 입력값으로 인접 리스트 삽입
for (int i = 1; i < n; i++) {
StringTokenizer st = new StringTokenizer(br.readLine());
int left = Integer.parseInt(st.nextToken());
int right = Integer.parseInt(st.nextToken());
list.get(left).add(right);
list.get(right).add(left);
}
// BFS
Queue<Integer> queue = new LinkedList<>();
queue.add(1);
visited[1] = true;
while (!queue.isEmpty()) {
int temp = queue.poll();
for (int i : list.get(temp)) {
if (!visited[i]) {
visited[i] = true;
queue.add(i);
parent[i] = temp;
}
}
}
// 출력
for (int i = 0; i < parent.length; i++) {
if ((parent[i] != 0)) {
if (i == parent.length - 1) {
sb.append(parent[i]);
} else {
sb.append(parent[i]).append("\n");
}
}
}
System.out.println(sb.toString());
}
}