1. ๋ฌธ์ ์ค๋ช
ํธ๋ฆฌ์์ A๋ฒ ๋ ธ๋๋ฅผ ์์ด์ ๋ ๋ฆฌํ ๋ ธ๋์ ๊ฐ์๋ฅผ ๊ตฌํ์ฌ๋ผ
2.ํธ๋ ์๋ฆฌ
์์ ์ค๋ช ์ฒ๋ผ, ๋๋ ์ ๊ฑฐ๋๋ ์ค๊ฐ ๋ ธ๋๊ฐ ๊ฐ์ง leaf ๋ ธ๋์ -111 ์ด๋ ๊ฐ์์ ๋ ธ๋๋ฅผ ์๋ก ๋ํด์ฃผ์๊ณ , ๊ทธ๋ ๊ฒ ํด์ leaf ๋ ธ๋๊ฐ ์๋ ๊ฒ์ผ๋ก ๋ง๋ค์๋ค. ๊ทธ๋ฆฌ๊ณ ๋ค์ ์ ์ฒด ๋ ธ๋์์ ์์ ๋ ธ๋๊ฐ ์๋ ๋ ธ๋์ ๊ฐ์๋ฅผ ์ธ์ด์ค์ ๋ฆฌํ ๋ ธ๋์ ๊ฐ์๋ฅผ ๊ตฌํ๋ค. ํ์ง๋ง ์ด ์๊ณ ๋ฆฌ์ฆ์์ ์์ธ๊ฐ ๋๋ ์ง์ ์ด ์กด์ฌํ๋ค. ๋ง์ฝ ์์ ์์์ ๋ ธ๋ 2์ฒ๋ผ ์์ ์ด ๊ฐ์ง ๋ชจ๋ leaf ๋ ธ๋๊ฐ -111์ด๋ ๊ฐ์์ ๋ ธ๋๋ฅผ ๊ฐ์ง๋ค๋ฉด, ์ค์ง์ ์ผ๋ก 2๊ฐ ๊ฐ์ง ๋ชจ๋ ์์ ๋ ธ๋๊ฐ ์ ๊ฑฐ ๋์๋ค๋ ์๋ฆฌ์์ผ๋ก 2๊ฐ leaf ๋ ธ๋๊ฐ ๋๋ค. ๋ฐ๋ผ์ ๋๋ ๋ง์ฝ ์ด๋ค ๋ ธ๋ A๊ฐ ๋ด๊ฐ ์ง์์ผ ํ๋ ๋ ธ๋๋ง ์์์ผ๋ก ๊ฐ์ง๋ค๋ฉด, ํด๋น ๋ ธ๋๋ฅผ leaf ๋ ธ๋๋ก ๋ง๋๋ ์์ธ์ฒ๋ฆฌ ๊ฐ์ ๋ํ ๊ฑฐ์ณค๋ค.
3. ์ฝ๋ ๋ถ์
import java.util.*;
import java.io.*;
public class Main{
static int N;
static ArrayList<Integer> [] lists;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
N = Integer.parseInt(br.readLine());
lists = new ArrayList[N];
for (int i = 0; i < N; i++) {
lists[i] = new ArrayList<>();
}
// ArrayList๋ฅผ ์ด์ฉํด, ํธ๋ฆฌ ๊ตฌํ
// index๊ฐ ์์๋
ธ๋, ๊ฐ์ด ๋ถ๋ชจ ๋
ธ๋
StringTokenizer st = new StringTokenizer(br.readLine());
for (int i = 0; i < N; i++) {
int parent = Integer.parseInt(st.nextToken());
if(parent == -1){
continue;
}
lists[parent].add(i);
}
// ์์์ด ์๋ ์์๋ ๋ชจ๋ ํน์ ์๋ค๋ก ArrayList<Integer>๊ฐ ํ๋๋ผ๋ ์ฐผ์ ๊ฒ์ด๋ค.
// ๋ฐ๋ฉด ์์์ด ์๋ ๋ฆฌํ๋
ธ๋๋ empty์ด๋ค.
// ํน์ ๋
ธ๋ ์ญ์ ์์๋ ํด๋น ๋
ธ๋์ ๋ฆฌํ ๋
ธ๋๊น์ง ๊ฐ์ ํด๋น ๋
ธ๋์ -1์ ๋ฃ์ด์ค๋ค.
int deleteNode = Integer.parseInt(br.readLine());
ArrayDeque<Integer> aq1 = new ArrayDeque<>();
aq1.add(deleteNode);
while(!aq1.isEmpty()){
int Qsize = aq1.size();
for (int i = 0; i < Qsize; i++) {
int nowNode = aq1.poll();
if(lists[nowNode].isEmpty()){
lists[nowNode].add(-111);
}
else{
for (int j = 0; j < lists[nowNode].size(); j++) {
aq1.add(lists[nowNode].get(j));
}
}
}
}
for (int i = 0; i < N; i++) {
if(lists[i].contains(deleteNode) && lists[i].size() > 1){
break;
}
if(lists[i].contains(deleteNode) && lists[i].size() == 1){
lists[i].clear();
}
}
int cnt = 0;
for (int i = 0; i < N; i++) {
if(lists[i].isEmpty()) cnt++;
}
System.out.println(cnt);
}
}