[백준] 11725번: 부모 찾기 - python

삼식이·2024년 2월 3일
0

알고리즘

목록 보기
4/81

부모 찾기

문제

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

입력

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

출력

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

예제

접근 방법

인접리스트로 풀었다. 방문하지 않은 노드에 방문할 때마다 visited 배열의 값을 부모 노드 값으로 업데이트하면 된다.

전체 코드

BFS

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

n = int(input())

graph = [[] for _ in range(n+1)]
visited = [0]*(n+1)

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

def bfs(x):
    q = deque([x])
    while q:
        now = q.popleft() 
        for nxt in graph[now]:
            if (visited[nxt]==0):
                visited[nxt] = now
                q.append(nxt)

bfs(1)

for i in range(2, n+1):
    print(visited[i])

DFS

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

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

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

def dfs(x):
    for nxt in graph[x]:
        if (visited[nxt]==0):
            visited[nxt] = x
            dfs(nxt)

dfs(1)

for i in range(2, n+1):
    print(visited[i])

0개의 댓글