문제
루트 없는 트리가 주어진다. 이때, 트리의 루트를 1이라고 정했을 때, 각 노드의 부모를 구하는 프로그램을 작성하시오.
입력
첫째 줄에 노드의 개수 N (2 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 N-1개의 줄에 트리 상에서 연결된 두 정점이 주어진다.
출력
첫째 줄부터 N-1개의 줄에 각 노드의 부모 노드 번호를 2번 노드부터 순서대로 출력한다.
예제 입력 1
7
1 6
6 3
3 5
4 1
2 4
4 7
예제 출력 1
4
6
1
3
1
4
복기
1. sys를 이용하여 입력을 받고, 재귀의 깊이를 제한해줘야 했다.
2. 1번 노드가 루트라는 문제의 조건이 있으니까 그점을 이용해서 dfs를 구현하는 문제였다.
솔루션
import sys
sys.setrecursionlimit(100000) # 재귀 깊이 제한 조정
input = sys.stdin.readline # 빠른 입력 처리
N = int(input())
graph = [[] for _ in range(N+1)] # 인접 리스트
for _ in range(N-1):
a, b = map(int, input().split())
graph[a].append(b)
graph[b].append(a)
parent = [0] * (N+1)
visited = [False] * (N+1)
def dfs(node):
visited[node] = True
for next_node in graph[node]:
# 아직 부모를 모르는 경우
if not visited[next_node]:
parent[next_node] = node
dfs(next_node) # 자식 노드로 이동하여 계속 탐색
dfs(1)
for i in range(2, N+1):
print(parent[i])
'Dev > Algorithm' 카테고리의 다른 글
[백준] #9205 맥주 마시면서 걸어가기 - 파이썬 (3) | 2025.08.23 |
---|---|
[백준] #1967 트리의 지름 - 파이썬 (0) | 2025.08.23 |
[백준] #6603 로또 - 파이썬 (0) | 2025.08.22 |
[백준] #9663 N-Queen - 파이썬 (1) | 2025.08.14 |
[백준] #6443 애너그램 - 파이썬 (0) | 2025.08.11 |
댓글