본문 바로가기

baekjoon

<java> 백준 1068 트리

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