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


import java.io.*;
import java.util.*;
public class Main {
static boolean[] check;
static int n, m;
static Set<Integer> tree[];
static Set<Integer> s = new HashSet<>();
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
n = Integer.parseInt(st.nextToken());
check = new boolean[n];
tree = new HashSet[n];
for (int i = 0; i < n; i++) {
tree[i] = new HashSet<>();
}
st = new StringTokenizer(br.readLine());
int start = 0;
for (int i = 0; i < n; i++) {
int tmp = Integer.parseInt(st.nextToken());
if (tmp == -1) {
start = i;
continue;
}
tree[tmp].add(i);
}
m = Integer.parseInt(br.readLine());
f(start);
System.out.println(s.size());
}
public static int f(int start) {
int count = 0;
if (start == m) {
return 0;
}
check[start] = true;
for (int i : tree[start]) {
if (!check[i]) {
count += f(i);
}
}
if (count == 0)
s.add(start);
return 1;
}
}

처음에 root 노드가 0이라고 가정하고 풀었기 때문에 틀렸다.
'baekjoon' 카테고리의 다른 글
| <java> 백준 14503 로봇 청소기 (0) | 2022.10.05 |
|---|---|
| <java> 백준 1240 노드사이의 거리 (0) | 2022.10.02 |
| <java> 백준 14502 연구소 (1) | 2022.09.30 |
| <java> 백준 1437 수 분해 (1) | 2022.09.30 |
| <java> 백준 7569 토마토 (1) | 2022.09.30 |