일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- 누적합
- 크루스칼
- 서브쿼리
- 그래프 이론
- 백트래킹
- join
- 트리
- 분할정복
- 플로이드-워셜
- 그래프 탐색
- 다이나믹 프로그래밍
- MST
- 다이나믹프로그래밍
- 우선순위큐
- 브루트포스
- BFS
- 구현
- DFS
- DP
- 다시
- 수학
- 다익스트라
- 그리디
- 재귀
- 에라토스테네스의 체
- 투포인터
- 시뮬레이션
- 자료구조
- 해시
- GROUP BY
- Today
- Total
기록하고 까먹지 말기
1446 본문
날짜 : 2023. 07. 10
사용 언어 : python
문제
코드
import sys
import heapq
def dijkstra(node): # 시작노드
q = list()
heapq.heappush(q, (0, node))
distance[node] = 0
while q:
dist, now = heapq.heappop(q)
if dist > distance[now]: continue # 거리 갱신 필요 없는 경우
for i in graph[now]:
cost = dist + i[1]
if cost < distance[i[0]]: # 거리 갱신 가능한 경우
distance[i[0]] = cost # 최신화
heapq.heappush(q, (cost, i[0])) # heap에 삽입
return
N, D = map(int, sys.stdin.readline().split())
graph = [[] for _ in range(D + 1)]
for i in range(D):
graph[i].append((i+1, 1)) # 초기 거리 1로 초기화
distance = [int(1e9)] * (D + 1)
for i in range(N):
s, e, c = map(int, sys.stdin.readline().split())
if (e - s) < c or e > D: continue
graph[s].append((e, c)) # s -> e까지의 거리가 c
dijkstra(0)
print(distance[D])
풀이
- 다익스트라를 활용하여 풀이한다.
- 0에서 출발하여 D에 도착하는 것이기 때문에 거리를 1마다 존재하는 노드로 산정하여 그래프를 만들어 풀이한다.
(노드 3의 경우에는 2, 4와 연결되어 있지만 방향성이 무조건 증가하기 때문에 4와 연결되어 있고, 그 거리는 1이다. 그래서 (4, 1)인 튜플만 갖게 된다.)
- 그 다음 지름길을 입력받고, 지름길의 도착점이 D보다 큰 경우, 지름길보다 정순으로 이동하는 것이 더 효율적인 경우를 필터링 한 다음 지름길을 적용한다.
- 그 다음 다익스트라를 사용해 시작점부터 각 노드까지의 최소 거리를 구한 후, D까지의 최소거리를 출력한다.
알게된 점
- 다익스트라를 작년 10월쯤 하고 거의 안풀었다보니 좀 어색하게 느껴졌다.
- 나동빈님의 블로그도 참고하고, 이 풀이방식도 참고하면서 차근차근 풀어보니까 새록새록 생각나는 것 같다.
참고 사이트
- 다익스트라 : https://m.blog.naver.com/ndb796/221234424646
23. 다익스트라(Dijkstra) 알고리즘
다익스트라(Dijkstra) 알고리즘은 다이나믹 프로그래밍을 활용한 대표적인 최단 경로(Shortest P...
blog.naver.com
- 풀이 : https://jie0025.tistory.com/200
[BOJ - 다익스트라] 1446번 : 지름길 (python)
백준 알고리즘 - 다익스트라 - 1446 지름길 파이썬 https://www.acmicpc.net/problem/1446 1446번: 지름길 첫째 줄에 지름길의 개수 N과 고속도로의 길이 D가 주어진다. N은 12 이하인 양의 정수이고, D는 10,000보
jie0025.tistory.com