반응형
[백준] 11725 트리의 부모 찾기
dfs&bfs / 파이썬
[문제]
bfs나 dfs를 사용하는 문제
입력값) n:노드 a,b: 연결된 두 노드
인접 리스트방식으로 입력값이 주어짐. 백준은 이런형태가 많은 듯 하다.
[과정]
- 기본적인 dfs탐색
- 부모-자식노드를 저장할 딕셔너리(parent)를 생성하고 bfs를 돌때 마지막부분에 부모-자식노드를 연결
[소스코드]
# 트리의 부모 찾기
from collections import deque
n = int(input())
graph = [[] for _ in range(n+1)]
visited = [False] * (n+1)
for i in range(n-1):
a,b = map(int, input().split())
graph[a].append(b)
graph[b].append(a)
parent = {}
def bfs(graph, start, visited):
q = deque([start])
visited[start] = True
while q:
v = q.popleft() # v: 부모노드
for i in graph[v]: # i: 자식노드 (v의 연결된 노드이기 때문)
if not visited[i]:
q.append(i)
parent[i] = v
visited[i] = True
bfs(graph, 1, visited)
for i in range(2,n+1):
print(parent[i])
나는 bfs를 사용했다.
bfs가 dfs보다 속도면에서 빠르기 때문이다.
파이썬은 웬만하면 코테에서는 bfs를 쓰는게 효율적이다.
[통과]
기본적인 dfs/ bfs 문제
반응형
'코딩테스트 문제풀이 > beakjoon' 카테고리의 다른 글
[백준] 10872 팩토리얼 (0) | 2021.08.05 |
---|---|
[백준] 11718 그대로 출력하기 (0) | 2021.08.05 |
[백준] 18352 특정 거리의 도시 찾기 (0) | 2021.07.30 |
[백준] 1439 뒤집기 (0) | 2021.04.04 |
[백준] 13305 주유소 (2) | 2021.02.10 |
댓글