문제
https://www.acmicpc.net/problem/11725
11725번: 트리의 부모 찾기
루트 없는 트리가 주어진다. 이때, 트리의 루트를 1이라고 정했을 때, 각 노드의 부모를 구하는 프로그램을 작성하시오.
www.acmicpc.net
풀이
import sys
input = sys.stdin.readline
sys.setrecursionlimit(10**6)
def dfs(node):
global parents,tree
for i in tree[node]: # tree[node](node의 부모 or 자식) 을 순회
if parents[i] == 0: # 만약 i의 부모가 아직 지정되지 않았다면
parents[i] = node # node의 자식이므로 i의 부모를 node로 설정
dfs(i) # i를 부모로 가진 노드를 찾기위해 dfs 탐색
n = int(input())
tree = [[] for _ in range(n+1)]
for _ in range(n-1): # 간선만큼 반복
a,b = map(int,input().split()) # 부모, 자식 입력받아서
tree[a].append(b) # 리스트에 넣기
tree[b].append(a)
parents = [0 for _ in range(n+1)] # 부모 리스트 만들기
parents[1] = 1 # 1의 부모는 1로 설정
dfs(1) # 부모 찾기
print(*parents[2:])
트리를 리스트로 구현하여 푼 방법이다.
dfs로 특정 노드의 부모, 자식의 parents 리스트를 비교하여 부모를 구한다.
'코딩테스트 > Python' 카테고리의 다른 글
[Python] 백준 #11047 - 동전 0 (0) | 2022.01.17 |
---|---|
[Python] 백준 #1931 - 회의실 배정 (0) | 2022.01.16 |
[Python] 백준 #3273 - 두 수의 합 (0) | 2022.01.14 |
[Python] 백준 #11399 - ATM (0) | 2022.01.13 |
[Python] 백준 #1012 - 유기농 배추 (0) | 2022.01.13 |