알고리즘 공부

백준 트리(복습)

컴퓨터과학 2023. 11. 20. 21:46

https://www.acmicpc.net/problem/1068

 

1068번: 트리

첫째 줄에 트리의 노드의 개수 N이 주어진다. N은 50보다 작거나 같은 자연수이다. 둘째 줄에는 0번 노드부터 N-1번 노드까지, 각 노드의 부모가 주어진다. 만약 부모가 없다면 (루트) -1이 주어진다

www.acmicpc.net

자바로 풀었습니다 쉽네요

import java.util.*;
import java.lang.*;
import java.lang.reflect.Array;
import java.io.*;
public class Main {
	public static ArrayList<ArrayList<Integer>> tree=new ArrayList<>();
	public static ArrayList<Boolean> bVisited=new ArrayList<>();
	public static int gnct=0;
	public static void dfs(int k,int d) {
		bVisited.set(k, true);
		
		boolean bFind=false;
		for(int i=0;i<tree.get(k).size();i++) {
			
			if(bVisited.get( tree.get(k).get(i) ) ==false&& d!= tree.get(k).get(i) ) {
				bFind=true;
				dfs( tree.get(k).get(i) ,d);
			}
			
		}
		
		if(bFind==false) {
			
			gnct++;
		}
		
	}
	
	public static void main(String[] args) throws Exception {
		Scanner scan=new Scanner(System.in);
		
		int n=scan.nextInt();
		int lists[]=new int[n];
		for(int i=0;i<n;i++) {
			tree.add(new ArrayList<>());
		}
		int start=0;
		for(int i=0;i<n;i++) {
			int tmp=scan.nextInt();
			lists[i]=tmp;
			bVisited.add(false);
			
			if(tmp!=-1) {
				tree.get(tmp).add(i);
				tree.get(i).add(tmp);
			}else {
				start=i;
			}
			
			
		}
		int d=scan.nextInt();
		
		if(d!=start) {
			dfs(start,d);
		}
		System.out.print(gnct);

	}
}