[WEEK03] 백준 11725 트리의 부모 찾기

UBIN·2023년 4월 25일
0
post-custom-banner

문제

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

입력

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

출력

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

풀이

루트가 1번 노드이니 1번 노드를 시작으로 탐색하면서 현재 노드의 값을 다음 노드에 전달 해주면 되는 문제이다.
DFS, BFS 둘 다 가능하다.

전체코드 1 (DFS)

import sys
input = sys.stdin.readline

def dfs(start, parent):
	# 방문처리함과 동시에 부모노드 번호를 전달받음
    # 양수가 들어가면 방문처리가능
    visit_parent[start] = parent

    for next in graph[start]:
        if not visit_parent[next]:
        	# 현재 노드의 번호를 다음 노드에게 전해줌
            dfs(next, start)

n = int(input())
graph = [[] for _ in range(n + 1)]
visit_parent = [0] * (n + 1)

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

dfs(1, 1
# 1번 노드를 제외한 2번 노드부터 순서대로 부모 출력
print(*visit_parent[2:], sep = '\n')

전체코드 2 (BFS)

import sys
from collections import deque
input = sys.stdin.readline

def bfs(start, parent):
    q = deque()
    visit_parent[start] = parent
    q.append(start)

    while q:
        now = q.popleft()

        for next in graph[now]:
            if not visit_parent[next]:
            	# 다음 노드의 방문처리를 현재 노드의 번호로 한다
                visit_parent[next] = now
                q.append(next)

n = int(input())
graph = [[] for _ in range(n + 1)]
visit_parent = [0] * (n + 1)

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

bfs(1, 1)

print(*visit_parent[2:], sep = '\n')
profile
ubin
post-custom-banner

0개의 댓글