알고리즘 공부
백준 트리(복습)
컴퓨터과학
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);
}
}