Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 30 |
Tags
- 기술면접
- 다이나믹프로그래밍
- U_stage
- 알고리즘스터디
- 이코테
- dfs
- 구현
- mrc
- 최단경로
- 백준
- Level1
- 그리디
- Level2
- 다시보기
- 백트랙킹
- dp
- 프로그래머스
- ODQA
- python3
- 단계별문제풀이
- 이진탐색
- 개인회고
- 파이썬 3
- 정렬
- 부스트캠프_AITech3기
- 그래프이론
- 부스트캠프_AITech_3기
- 주간회고
- 알고리즘_스터디
- Level2_PStage
Archives
- Today
- Total
국문과 유목민
[최단경로] 전보 본문
1. 문제 설명
도시와 도시가 연결되어 있을 때 전보를 보내는 경우 얼마나 많은 도시에 보낼 수 있으며, 가장 먼 거리는 얼마인지 구하는 문제이다.
- 다익스트라 알고리즘을 활용한 문제로 heapq를 활용한다.
2. 코드
import heapq
# 입력
INF = int(1e9)
a, b, start = map(int, input().split())
graph = [[] for _ in range(a+1)]
distance = [INF]*(a+1)
for _ in range(b):
x, y, z = map(int, input().split())
graph[x].append((y, z)) # 노드, 거리
# 다익스트라 알고리즘
def dijkstra(start):
q = []
heapq.heappush(q, (0, start)) # 거리, 노드 순서로 넣어야 우선순위대로 가능
distance[start] = 0
while q:
dist, now = heapq.heappop(q)
if distance[now] < dist:
continue
for graph2 in graph[now]:
cost = dist + graph2[1]
if cost < distance[graph2[0]]:
distance[graph2[0]] = cost
heapq.heappush(q, (cost, graph2[0]))
# 실행 및 출력
dijkstra(c)
max_distance = 0
count = 0
for i in distance:
if i != INF and i != 0:
count+=1
max_distance = max(max_distance, i)
count, max_distance
"""
3 2 1 (node, edge, start)
1 2 4
1 3 2
>> (2, 4) (count, max_distance)
"""
3. 코멘트
- 다익스트라 알고리즘의 경우 암기를 해야할 필요가 있을 것 같다.
- 이론을 문제에 접목시키면 바로 답이 되는 경우가 있는 것 같다.
'알고리즘_코딩테스트 > 이것이 코딩테스트다' 카테고리의 다른 글
[그래프] 도시 분할 계획 (0) | 2021.12.08 |
---|---|
[그래프] 팀 결성 (0) | 2021.12.07 |
[최단경로] 미래도시 (0) | 2021.12.07 |
[DP] 효율적인 화폐구성 (0) | 2021.12.07 |
[DP] 바닥공사 (0) | 2021.12.07 |
Comments