-
백준_15591_MooTube (python)Algorithm/백준_생각정리 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보다 큰 유사도만 개수를 구하는 거였기 때문에 굳이 한 노선을 깊게 파지 않아도 정답을 구할 수 있었다.
'Algorithm > 백준_생각정리' 카테고리의 다른 글
백준_29767_점수를 최대로 (python) (1) 2023.09.10 백준_2212_센서 (python) (0) 2023.08.01 백준_16918_봄버맨 (python) (0) 2023.07.30 백준_28360_양동이 게임(python) (0) 2023.07.25 백준_16568_엔비스카의 영혼 (python) (0) 2023.07.16