반응형
문제
루트 없는 트리가 주어진다. 이때, 트리의 루트를 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
예제 입력 2
12
1 2
1 3
2 4
3 5
3 6
4 7
4 8
5 9
5 10
6 11
6 12
예제 출력 2
1
1
2
3
3
4
4
5
5
6
6
나의 풀이
연결에 대한 정보를 가지고 트리를 양방향 그래프로 생각하고 인접리스트를 만들어주었다. 그리고 BFS로 1번부터 탐색을 시작해 아직 방문하지않은 노드에 대하여 그때 당시의 노드 번호를 저장하고 큐에 넣어주는 식으로 반복을 하였다.
양방향 그래프 인접리스트를 만든다.
1번부터 BFS로 탐색을 한다.
-> 방문 여부를 따져준다.
-> 다음 방문할 노드에 현재 노드의 번호를 저장한다.
코드
# 11725번 트리의 부모 찾기
from collections import deque
n = int(input())
node = [0 for _ in range(n+1)]
adj_list = [[] for _ in range(n+1)]
for _ in range(n-1):
x, y = map(int, input().split())
adj_list[x].append(y)
adj_list[y].append(x)
q = deque()
q.append(1)
node[1] = 1
while q:
cur = q.pop()
for i in adj_list[cur]:
if node[i] == 0:
node[i] = cur
q.append(i)
for i in range(2, n+1):
print(node[i])
반응형
'Programming > Algorithm' 카테고리의 다른 글
[백준1991번] 트리순회 (0) | 2020.12.04 |
---|---|
[백준1167번] 트리의 지름 / Python3 (0) | 2020.12.02 |
[프로그래머스] 완주하지 못한 선수 - Python3 (0) | 2020.11.27 |
[프로그래머스] 크레인 인형뽑기 게임 / Python3 (0) | 2020.11.27 |
[백준 2960번] 에라토스테네스의 체 / Python3 (0) | 2020.11.19 |