개발/algorithm

[백준 14938번] 서강 그라운드 - python

zzi_on2 2022. 3. 11. 15:25

문제 링크

https://www.acmicpc.net/problem/14938

 

14938번: 서강그라운드

예은이는 요즘 가장 인기가 있는 게임 서강그라운드를 즐기고 있다. 서강그라운드는 여러 지역중 하나의 지역에 낙하산을 타고 낙하하여, 그 지역에 떨어져 있는 아이템들을 이용해 서바이벌을

www.acmicpc.net

풀이 

- 플로이드 워셜 알고리즘 사용하여 풀이

- graph에 i에서 j까지의 최단 거리 저장 

- 1부터 n까지 숫자에 대하여 예은이가 떨어졌을 때 얻을 수 있는 아이템 수 구하기 

n, m, r = map(int,input().split())

item = list(map(int,input().split()))

INF = int(1e9)

graph = [ [INF] * (n+1) for _ in range(n+1) ]

for i in range(1,n+1):
  for j in range(1,n+1):
    if i == j:
      graph[i][j] = 0

for _ in range(r):
  a,b,c = map(int,input().split())
  graph[a][b] = c 
  graph[b][a] = c 

for k in range(1,n+1):
  for a in range(1,n+1):
    for b in range(1,n+1):
      graph[a][b] = min(graph[a][b], graph[a][k] + graph[k][b])

answer = 0
for i in range(1,n+1):
  result = 0 
  # 예은이가 떨어진 지역에서 다른 지역까지의 거리가 수색 범위에 속하면 
  for j in range(1,n+1):
    if graph[i][j] <= m:
      # 해당 지역의 아이템 추가 
      result += item[j-1]
   # 최댓값 갱신 
  answer = max(answer,result)

print(answer)