- Floyd 알고리즘을 적용하여 모든 정점에서 다른 정점에 도달하는 최소 거리를 구해준다.(최대 50개의 마을까지이므로, 더 늘어나면 dijkstra 알고리즘 적용)
- 이후 distance[1]을 조사하여 1번 마을에서 K 거리 이내의 마을들의 개수를 출력해주면 된다.
import copy
def solution(N, road, K):
INT_MAX = 9999999999
matrix = [[INT_MAX] * (N+1) for _ in range(N+1)]
for a, b, c in road:
if matrix[a][b] > c:
matrix[a][b] = c
matrix[b][a] = c
distance = copy.deepcopy(matrix)
for i in range(1, N+1):
distance[i][i] = 0
# floyd Algorithm
for i in range(1, N+1):
for j in range(1, N+1):
for k in range(1, N+1):
distance[j][k] = min(distance[j][k], distance[j][i] + distance[i][k])
# 1에서 도달 가능한 개수 출력
answer = len(list(filter(lambda x:x<=K, distance[1])))
return answer
출처: 프로그래머스 코딩 테스트 연습, https://programmers.co.kr/learn/challenges
'알고리즘[Python] > 프로그래머스' 카테고리의 다른 글
[ Lv 2 ] 큰 수 만들기 (0) | 2021.06.25 |
---|---|
[ Lv 2 ] 괄호 회전하기 (0) | 2021.06.25 |
[ Lv 2 ] H-Index (0) | 2021.06.24 |
[ Lv 2 ] 조이스틱 (0) | 2021.06.24 |
[ Lv 2 ] 예상 대진표 (0) | 2021.06.24 |