Algorithm/백준_생각정리
백준_15591_MooTube (python)
코친남
2023. 7. 31. 13:52
★ 접근
문제 지문에서 '네트워크 형태' + n과 q의 최대 크기를 미뤄봤을 때 그래프 문제인 것을 떠올렸고 처음에는 dfs로 풀었다가 시간초과가 발생했다. 입력 최대 크기가 백을 넘어가면 웬만하면 dfs를 사용하지 않는데도 불구하고 dfs를 사용했던 이유는 k,v가 입력으로 주어졌을 때 매번 v에 대해서 dfs 성질을 이용해야 된다고 생각했기 때문이다. 역시나 시간초과가 나왔고 bfs로 풀었다.
★ 풀이
코드를 보면 어이가 없을 정도로 간단하다.
매 입력에 대해서 방문하지 않은 노드이면서 현재 usado가 k보다 크거나 같다면 q에 추가(노선을 따라감) count(결과 값)를 1씩 늘린다.
★ 코드
from collections import deque
import sys
input = sys.stdin.readline
n,question = map(int,input().split())
graph = [[] for _ in range(n+1)]
for i in range(n-1):
p,q,r = map(int,input().split())
graph[p].append([q,r])
graph[q].append([p,r])
def solve(k,v):
count = 0
q = deque()
q.append(v)
visited = [0] * (n+1)
visited[v] = 1
while q:
node = q.popleft()
for next, usado in graph[node]:
if not visited[next]:
if k <= usado:
visited[next] = 1
q.append(next)
count += 1
return count
for i in range(question):
k,v = map(int,input().split())
print(solve(k,v))
★ 회고
bfs인 것을 알면서도 dfs로 풀었다. dfs를 택한 이유보다 bfs를 택하지 않았던 이유는 한 번 탄 노선에 대해서는 쭉 따라가야 한다고 생각했기 때문이다. bfs는 그것을 하지 못한다고 생각을 했고 하지만 문제는 k보다 큰 유사도만 개수를 구하는 거였기 때문에 굳이 한 노선을 깊게 파지 않아도 정답을 구할 수 있었다.