# 문제
백준 11725 트리의 부모찾기 파이썬 풀이
# 코드
import sys
from collections import deque
from collections import defaultdict
N = int(sys.stdin.readline().strip())
ddict = defaultdict(list)
result = [-1] * (N+1)
for i in range(N-1) :
a,b = map(int,sys.stdin.readline().strip().split())
ddict[a].append(b)
ddict[b].append(a)
dq = deque()
dq.append(1)
result[1] = 1
while len(dq) != 0 :
cur = dq.popleft()
for next in ddict[cur] :
# print(f"cur : {cur} , next : {next}")
if result[next] == -1 :
result[next] = cur
dq.append(next)
for i in range(2,N+1) :
print(result[i])
# 풀이
- BFS와 DFS풀이 모두 가능할걸로 보인다. DFS공부하려고 했는데 아무리봐도 BFS푸는게 쉬워보여서 BFS로 풀었다.
- 무방향으로 각 노드를 연결하고 인접리스트로 표현한다.
- 트리의 루트는 1이기 때문에, 1의 인접리스트로 BFS를 돌린다.
- 루트노드( 1 )의 인접리스트가 뽑히면, 뽑힌 노드의 부모를 루트노드로하고 방문표시 후 큐에 넣고 반복한다.
'•알고리즘(Algorithm ) > 문제풀이' 카테고리의 다른 글
[백준1325&파이썬] DFS+DP는 사이클이 없을때 사용 가능하다. (0) | 2023.04.15 |
---|---|
[백준2644&파이썬] 재귀식을 이용한 DFS 사용할때는 실패케이스에 대한 반환값을 생각하자 (0) | 2023.04.15 |
[백준1520&파이썬] DFS에 메모이제이션을 곁들여서 시간초과를 해결하자 (1) | 2023.04.15 |
[백준1987&파이썬] DFS와 백트래킹을 이용하여 조건에 맞는 값을 구하자 (0) | 2023.04.13 |
[백준2573&파이썬] BFS를 활용할때는 단계적으로 잘 나누어 풀자 (0) | 2023.04.11 |