728x90
출처 : 11725번: 트리의 부모 찾기 (acmicpc.net)
트리의 부모 찾기 성공분류
시간제한 메모리 제한 제출 정답 맞은 사람 정답 비율
1 초 | 256 MB | 18862 | 8013 | 5971 | 43.501% |
문제
루트 없는 트리가 주어진다. 이때, 트리의 루트를 1이라고 정했을 때, 각 노드의 부모를 구하는 프로그램을 작성하시오.
입력
첫째 줄에 노드의 개수 N (2 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 N-1개의 줄에 트리 상에서 연결된 두 정점이 주어진다.
출력
첫째 줄부터 N-1개의 줄에 각 노드의 부모 노드 번호를 2번 노드부터 순서대로 출력한다.
[ 문제 설명 ]
루트 노드는 1번이라 가정하고 연결된 노드를 무작위로 주어질 때, 각 트리의 부모를 찾는 문제.
우선 문제를 이해하기 위해 1을 루트 노드로 설정하고 노드의 그림을 예제를 통해 그려보면 이해하기 쉽다.
그림으로 설명하겠다.
왜 tree 배열을 딕셔너리로 초기화했는지 이해가 가시나요?
딕셔너리를 이용해 인덱스 부분과 node를 일치시켜서 편하게 코딩하기 위함이지요.
[ 코드 ]
import sys
from collections import deque
n = int(sys.stdin.readline())
parent = [0] * (n + 1)
parent[1] = 1
tree = {}
for i in range(1, n+1):
tree[i] = []
for j in range(n - 1):
conNode1, conNode2 = map(int, input().split())
tree[conNode1].append(conNode2)
tree[conNode2].append(conNode1)
# print(tree)
# BFS
def BFS(q):
while q:
#print(q, end="->")
node = q.popleft()
#print(node, end="=>")
for kid in tree[node]:
if not parent[kid]:
parent[kid] = node
q.append(kid)
return parent
q = deque([1])
BFS(q)
for ch in parent[2:]:
print(ch)
후기
딕셔너리를 통해 좀 더 간편하게 코딩할 수 있는 스킬을 배운거 같다.
복습을 통해 좀더 확실하게 이해가 된 거 같다...
728x90
'백준 코딩 테스트' 카테고리의 다른 글
백준 2805번 - 나무 자르기 (0) | 2021.02.25 |
---|---|
백준 1654번 - 랜선 자르기 (0) | 2021.02.25 |
백준 1991번 - 트리 순회 (0) | 2021.02.22 |
백준 2146번 - 다리 만들기 (0) | 2021.02.22 |
백준 2178번 - 미로탐색 (0) | 2021.02.22 |