https://www.acmicpc.net/submit/1068/35162027
tree
배열을 완성함import java.util.*;
import java.io.*;
public class Main {
static int N;
static Node[] tree;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
N = Integer.parseInt(st.nextToken());
tree = new Node[N];
for(int i = 0; i < N; i++) tree[i] = new Node(i);
Node rootNode = null;
st = new StringTokenizer(br.readLine());
for(int i = 0; i < N; i++) {
int parent = Integer.parseInt(st.nextToken());
if(parent == -1) rootNode = tree[i];
else tree[parent].child.add(i); //부모의 list에 현재 index를 넣기
}
st = new StringTokenizer(br.readLine());
int deleteIdx = Integer.parseInt(st.nextToken());
if(deleteIdx == rootNode.index) {
System.out.println(0);
return;
}
int count = 0;
Queue<Node> q = new LinkedList<Node>();
q.offer(rootNode);
while(!q.isEmpty()) {
Node cur = q.poll();
boolean isLeaf = true;
for(int i = 0; i < cur.child.size(); i++) {
if(cur.child.get(i) == deleteIdx) continue;
q.offer(tree[cur.child.get(i)]);
isLeaf = false;
}
if(isLeaf) count++;
}
System.out.println(count);
}
}
class Node{
int index;
ArrayList<Integer> child;
Node(int index){
this.index = index;
child = new ArrayList<Integer>();
}
}