1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
def dist_bfs(adj_matrix):
from collections import deque
visited = set()
queue = deque([1])
dist_list = [50001 for x in range(len(adj_matrix))]
dist_list[0] = 0
while queue:
node = queue.popleft()
if node not in visited:
visited.add(node)
queue += adj_matrix[node] - visited
for x in adj_matrix[node]:
dist_list[x-1] = min(dist_list[x-1], dist_list[node-1]+1)
return dist_list
def solution(n, edge):
adj_matrix = {key : set() for key in range(1,n+1)}
for a,b in edge:
adj_matrix[a].add(b)
adj_matrix[b].add(a)
dist_list = dist_bfs(adj_matrix)
max_dist = max(dist_list)
answer = 0
for x in dist_list:
if x == max_dist:
answer += 1
return answer
|
cs |
여기서 주의해야할 점은 매우 빈번히 연산되는 visited를 set으로 해야한다는 점이다.
파이썬 내부적으로 list가 set보다 iteration에서는 빠르지만
탐색(in함수)에서는 set이 훨씬 빠르다.
'컴퓨터 > 문제 풀기' 카테고리의 다른 글
[프로그래머스] 순위 python 파이썬 (0) | 2020.03.21 |
---|---|
에라토스테네스의 채(c++,python)과 파이썬의 split을 c++로 구현하기 (0) | 2020.02.14 |
c++ 생성자에는 초기값 대입만 쓰자 (0) | 2020.02.04 |
백준 8741번 이진수 합 (0) | 2019.07.29 |
백준 8595번 히든넘버 (0) | 2019.05.27 |