관리 메뉴

어읽로꾸거

BOJ 1068 트리 본문

알고리즘

BOJ 1068 트리

어읽로꾸거 2019. 4. 7. 16:34

백준 1068 링크

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

 

1068번: 트리

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

www.acmicpc.net

문제 풀이

python 으로 풀었습니다. 끔찍한 실력

 

map[시작노드] 에 (도착노드)를 append 시켜주고 삭제될 노드를 입력 받은 후에 다시 삭제될 노드인 도착노드들을 다 없애줍니다.

 

dfs로 탐색을 할 수 있도록 find() 함수로 탐색을 시작합니다.

 

만약 루트 노드가 삭제됬다면 탐색을 하지 않고 끝냅니다.

코드

def find(x):
    global count
    if len(map[x]) == 0:
        count=count+1
    else:
        for i in map[x]:
            find(i)
            
count = 0;
n = int(input())
l = list(map(int,input().split()))
map = [[]for _ in range(52)]
for _ in range(0, n):
    if(l[_] == -1):
        start = _
    else:
        map[l[_]].append(_)
t = int(input())
for i in range(n):
    if t in map[i]:
        map[i].remove(t)
if start != t:
    find(start)
print(count)

'알고리즘' 카테고리의 다른 글

BOJ 1743 음식물 피하기  (0) 2019.04.11
BOJ 1162 도로포장  (0) 2019.04.10
BOJ 16785 ソーシャルゲーム  (0) 2019.04.07
BOJ 5397 키로거  (0) 2019.04.05
BOJ 5558 チーズ  (0) 2019.04.05