ALGORITHM/BOJ
[백준] 11725 트리의 부모 찾기
0298
2020. 11. 12. 22:11
11725번: 트리의 부모 찾기
루트 없는 트리가 주어진다. 이때, 트리의 루트를 1이라고 정했을 때, 각 노드의 부모를 구하는 프로그램을 작성하시오.
www.acmicpc.net
2020-11-12
import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;
public class Main11725 {
public static Queue<Integer> q;
public static LinkedList<Integer>list[];
public static boolean vtd[];
public static int arr[];
public static void solve() {
while(!q.isEmpty()) {
int num = q.poll();
vtd[num] = true;
for(int i : list[num]) {
if(!vtd[i]) {
arr[i] = num;
q.add(i);
}
}
}
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int N = sc.nextInt();
list = new LinkedList[N+1];
vtd = new boolean[N+1];
arr = new int[N+1];
q = new LinkedList<Integer>();
for(int i = 0; i <= N; i++) list[i] = new LinkedList();
for(int i = 0; i < N-1; i++) {
int x = sc.nextInt();
int y = sc.nextInt();
list[x].add(y);
list[y].add(x);
}
q.add(1);
solve();
for(int i = 2; i <= N; i++) {
System.out.println(arr[i]);
}
}
}
문제는 단순하게 풀었다.
1. LinkedList로 두 개의 이어지는 정점을 저장했다.
2. Queue에 루트 번호를 넣고, 루트와 이어지는 정점들을 돌면서 부모 노드번호를 저장했다.
맞긴 맞았는데, 메모리와 시간이 너무 커서 초과 날 가능성이 높아 LinkedList가 아닌 ArrayList로 푸는게 더 적절해보인다.