Algorithm/백준

[백준 알고리즘] 27008번: Checking an Alibi (Python)

에릭 Kim 2023. 11. 28. 14:46
반응형

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

 

27008번: Checking an Alibi

A crime has been comitted: a load of grain has been taken from the barn by one of FJ's cows. FJ is trying to determine which of his C (1 ≤ C ≤ 100) cows is the culprit. Fortunately, a passing satellite took an image of his farm M (1 ≤ M ≤ 70000) se

www.acmicpc.net

 

소스코드

import sys
import heapq as hq
input = sys.stdin.readline

def dijkstra(start):
  q = []
  min_dis[start] = 0
  hq.heappush(q,[0,start])

  while q:
    cur_dis,cur_node = hq.heappop(q)
    
    if min_dis[cur_node] < cur_dis:
      continue

    for next_node,next_dis in graph[cur_node]:
      if min_dis[next_node] > cur_dis + next_dis:
        min_dis[next_node] = cur_dis + next_dis
        hq.heappush(q,[cur_dis+next_dis,next_node])
    
f,p,c,m = map(int,input().split())
graph = [[] for _ in range(f+1)]
min_dis = [float('inf') for _ in range(f+1)]
for _ in range(p):
  a,b,t = map(int,input().split())
  graph[a].append([b,t])
  graph[b].append([a,t])

dijkstra(1)
ans = []
for i in range(1,c+1):
  k = int(input())
  if min_dis[k] <= m:
    ans.append(i)

print(len(ans))
for x in ans:
  print(x)

 

 

풀이

★ 다익스트라 문제들 쭉 보다가 제목이 흥미롭기도 했고, 영어지문으로 된 문제에 한번 도전해보고 싶어서 풀어봤습니다

 

  확실히 지문이 영어라 이해하는 데 어려움이 있었던 거 같아요. 하지만 문제 자체는 어렵지 않았습니다. 그냥 헛간이 있는 위치에서부터 소들이 있는 위치까지의 거리가 m이하라면 그 소는 범인이 될 수 있기 때문에 확인해주는 풀이방식입니당 :)   

반응형