부대복귀
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
- 내 풀이
- 여러 출발점에서 각각 최단 경로를 찾으면, 출발점마다 dijkstra 수행해야 하므로 매우 비효율적
- O((V+E)*V)
- 도착지는 동일한데 각각의 출발점과의 거리를 찾는 것
- ⇒ 도착지를 시작점으로 다른 지점까지의 거리를 찾으면 한번만 돌면됨
- 여러 출발점에서 각각 최단 경로를 찾으면, 출발점마다 dijkstra 수행해야 하므로 매우 비효율적
from collections import defaultdict
import heapq
def solution(n, roads, sources, destination):
answer = []
graph=defaultdict(list)
for road in roads:
s,e=road
graph[s].append(e)
graph[e].append(s)
def bfs(start):
queue=[]
heapq.heappush(queue,(0,start))
visited[start]=0
while queue:
d,cur=heapq.heappop(queue)
for nxt in graph[cur]:
if visited[nxt]<=d+1:
continue
visited[nxt]=d+1
heapq.heappush(queue,(d+1,nxt))
return
visited=[float('inf') for _ in range(n+1)]
bfs(destination)
for source in sources:
answer.append(visited[source] if visited[source]!=float('inf') else -1)
return answer
'코딩테스트 > BOJ' 카테고리의 다른 글
| [백준][최장증가수열] 줄세우기 (0) | 2025.02.24 |
|---|---|
| [백준][dp] 2293. 동전1 (0) | 2025.02.23 |
| [백준][이분탐색] 2110. 공유기 설치 (0) | 2025.02.17 |
| [백준][다익스트라] 14938. 서강그라운드 (0) | 2025.02.07 |
| [백준][DP][배낭문제] 할로윈의 양아치 (0) | 2025.02.04 |