Algorithm/Algorithm 문제
백준_1068 트리 (트리, dfs)
kjyyjk
2024. 3. 6. 11:57
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.StringTokenizer;
public class BJ_1068_트리 {
static int rootNode, deleteNode, result;
static boolean[] visited;
static ArrayList<Integer>[] tree;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
visited = new boolean[n];
tree = new ArrayList[n];
int i;
for (i=0; i<n; i++) {
tree[i] = new ArrayList<>();
}
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
int parentNode;
for (i=0; i<n; i++) {
parentNode = Integer.parseInt(st.nextToken());
if (parentNode == -1) {
rootNode = i;
} else {
tree[i].add(parentNode);
tree[parentNode].add(i);
}
}
deleteNode = Integer.parseInt(br.readLine());
if (deleteNode == rootNode) {
System.out.println(new StringBuilder().append(0));
} else {
result = 0;
dfs(rootNode);
System.out.println(new StringBuilder().append(result));
}
}
static void dfs(int nowNode) {
visited[nowNode] = true;
boolean leaf = true;
for (int nextNode : tree[nowNode]) {
if (visited[nextNode] == false && nextNode != deleteNode) {
leaf = false;
dfs(nextNode);
}
}
if (leaf) {
result++;
}
}
}
1068번: 트리
첫째 줄에 트리의 노드의 개수 N이 주어진다. N은 50보다 작거나 같은 자연수이다. 둘째 줄에는 0번 노드부터 N-1번 노드까지, 각 노드의 부모가 주어진다. 만약 부모가 없다면 (루트) -1이 주어진다
www.acmicpc.net