코테 공부

트리의 부모 찾기(백준 11725번, 자바)

DaEun_ 2023. 2. 16. 14:56

11725번: 트리의 부모 찾기 (acmicpc.net)

 

11725번: 트리의 부모 찾기

루트 없는 트리가 주어진다. 이때, 트리의 루트를 1이라고 정했을 때, 각 노드의 부모를 구하는 프로그램을 작성하시오.

www.acmicpc.net

 

 

 

[조건]

- 입력으로 노드 번호의 양방향 관계가 주어짐 

 

 

[구현]

- ArrayList 배열에 각 노드의 관계를 저장

- DFS로 탐색하면서 부모노드를 파악

 

import java.util.ArrayList;
import java.util.Scanner;

public class Main {

	Scanner sc=new Scanner(System.in);
	static int N;
	static ArrayList<Integer>[] arr;
	static boolean[] visit;
	static int[] num;
	
	
	public static void main(String[] args) {
		
		Scanner sc=new Scanner(System.in);
		N=sc.nextInt();
		visit=new boolean[N+1];
		arr=new ArrayList[N+1];
		num=new int[N+1];
		
		for(int i=0;i<=N;i++) {
			arr[i]=new ArrayList<>();
		}
		
		for(int i=0;i<N-1;i++) {
			int a=sc.nextInt();
			int b=sc.nextInt();
			
			arr[b].add(a); 
			arr[a].add(b);		
		}
		dfs(1,0);
		
		for(int i=2;i<=N;i++) System.out.println(num[i]);
	}
	
	static void dfs(int x, int cnt) { //노드 번호, 방문한 노드의 개수 
		
		if(cnt==N-1) return; 
		
		for(int i=0;i<arr[x].size();i++) {
			int n=arr[x].get(i);
			if(visit[n])	continue; 
			
			visit[n]=true;
			num[n]=x;//방문하지 않은 노드의 부모 노드는 X
			dfs(n, cnt+1);
		}
	}
}