루트 없는 트리가 주어진다. 이때, 트리의 루트를 1이라고 정했을 때, 각 노드의 부모를 구하는 프로그램을 작성하시오.
입력
첫째 줄에 노드의 개수 N (2 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 N-1개의 줄에 트리 상에서 연결된 두 정점이 주어진다.
출력
첫째 줄부터 N-1개의 줄에 각 노드의 부모 노드 번호를 2번 노드부터 순서대로 출력한다.
테스트 케이스
| 입력 예제 | 출력 예제 |
| 7 1 6 6 3 3 5 4 1 2 4 4 7 |
4 6 1 3 1 4 |
💻 나의 코드
import sys
input = sys.stdin.readline
sys.setrecursionlimit(10**6)
def hello(i, p):
if parents[i]:
return
parents[i] = p
for j in range(len(adj[i])):
hello(adj[i][j], i)
n = int(input())
adj = dict()
for i in range(1, n+1):
adj[i] = list()
for _ in range(n-1):
a, b = map(int, input().split())
adj[a].append(b)
adj[b].append(a)
adj[a].sort()
adj[b].sort()
parents = [None] * (n+1)
hello(1, 1)
for i in range(2, n+1):
print(parents[i])
DFS와 인접 리스트, 백트래킹을 사용하는 문제로, 여기서는 visited 대신 parents라는 리스트를 만들어서 트리의 부모를 찾는 함수에 사용하였다.
'PS > 백준' 카테고리의 다른 글
| [백준] (11724) 연결 요소의 개수 [Python] (0) | 2025.03.28 |
|---|---|
| [백준] (1260) DFS와 BFS [Python] (0) | 2025.03.28 |
| [백준] (2606) 바이러스 [Python] (0) | 2025.03.27 |
| [백준] (1991) 트리 순회 [Python] (0) | 2025.03.27 |
| [백준] (2667) 단지번호붙이기 [Python] (0) | 2025.03.26 |