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