본문 바로가기

Coding/Algorithm

BOJ(백준) 1068 - 트리

https://www.acmicpc.net/problem/1068





자료구조(트리), 리프노드, 차수, 트리 방향성

루트 있는 트리가 주어지고, 각 노드들의 부모노드가 주어진다. 어떤 한 노드를 제거 했을 때, 남는 리프노드(단말노드)의 개수를 구하는 프로그램을 작성하라.




시간복잡도 : O(N)

N은 트리 노드의 개수




점검해봐야 할 부분

-루트가 있는 트리의 방향성

-리프 노드의 성질




https://github.com/jongwuner/Algorithm/blob/master/BOJ/1068.cpp


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include<cstdio>
int p[50], a, c[50];
int main(){
    int n, d;
    scanf("%d"&n);
    for (int i = 0; i < n; i++){
        scanf("%d", p + i);
        if(p[i]>=0) c[p[i]]++;
    }
    scanf("%d"&d);
    c[p[d]]--;
    for (int i = 0; i < n; i++){
        if (c[i]) continue;
        int j = i;
        while (j != -1){
            if (j == d) break;
            j = p[j];
        }
        a += j == -1;
    }
    printf("%d\n", a);
    return 0;
}
cs


'Coding > Algorithm' 카테고리의 다른 글

BOJ(백준) 1949 - 우수마을  (0) 2019.01.13
BOJ(백준) 3482 - Labyrinth  (0) 2019.01.13
BOJ(백준) 11725 - 트리의 부모찾기  (0) 2019.01.13
BOJ(백준) 4803 - 트리  (0) 2019.01.13
BOJ(백준) 16437 - 양 구출 작전  (0) 2019.01.12