기록하는삶

[코딩 테스트 연습(파이썬/Python)] 백준(BOJ) 11725번 _ 트리의 부모 찾기 본문

백준(Python)/그래프, 그래프탐색

[코딩 테스트 연습(파이썬/Python)] 백준(BOJ) 11725번 _ 트리의 부모 찾기

mingchin 2022. 2. 12. 20:03
728x90
반응형

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

 

11725번: 트리의 부모 찾기

루트 없는 트리가 주어진다. 이때, 트리의 루트를 1이라고 정했을 때, 각 노드의 부모를 구하는 프로그램을 작성하시오.

www.acmicpc.net

[문제]

루트 없는 트리가 주어진다. 이때, 트리의 루트를 1이라고 정했을 때, 각 노드의 부모를 구하는 프로그램을 작성하시오.

 

[입력]

첫째 줄에 노드의 개수 N (2 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 N-1개의 줄에 트리 상에서 연결된 두 정점이 주어진다.

[출력]

첫째 줄부터 N-1개의 줄에 각 노드의 부모 노드 번호를 2번 노드부터 순서대로 출력한다.

 

[아이디어]

1) 1부터 순차적으로 탐색하며 연결된 노드를 살피되, 이미 부모 노드를 찾은 경우와 그렇지 않은 경우를 구분해가며 부모 노드를 결정한다.

2) 노드 순서대로 정렬 후 부모 노드를 출력한다.

import sys
input=sys.stdin.readline
sys.setrecursionlimit(10**6)

n = int(input())
g = [[] for _ in range(n+1)]
for _ in range(n-1):
    a,b = map(int,input().split())
    g[a].append(b)
    g[b].append(a)

d = dict()
def tree(s,g):
    if s ==1:
        for x in g[s]:
            d[x] = 1
            tree(x,g)
    else:
        for x in g[s]:
            if x not in d:
                d[x] = s
                tree(x,g)
                
tree(1,g)
d = sorted(d.items(),key = lambda x: x[0])
for a,b in d[1:]:
    print(b)
728x90
반응형