-
[BOJ 23033, Python 3] 집에 빨리 가고 싶어!알고리즘/BOJ 2021. 10. 5. 12:58반응형
https://www.acmicpc.net/problem/23033
23033번: 집에 빨리 가고 싶어!
첫째 줄에 역의 수 N(2 ≤ N ≤ 20,000)과 노선 M개(1 ≤ M ≤ 300,000)가 주어진다. 둘째 줄 부터 M개의 줄에 걸쳐서 4개의 정수 A, B, T, W가 주어지고 A역에서 B역으로 가는 단방향 노선이 존재하며, 소요
www.acmicpc.net
풀이
최단 시간을 구해야 하는데, A역에서 B역으로 가는데 걸리는 시간이 T이므로 다익스트라 알고리즘을 생각해볼 수 있습니다.
그리고 새로운 열차를 기다려서 타는 방법은 현재 시간이 W의 배수이면 그대로 현재 시간을 우선순위 큐에 넣어주고, 현재 시간이 W의 배수가 아니라면 (W - (현재 시간) % W)만큼 시간을 추가하여 움직이게 해주면 됩니다.
코드
12345678910111213141516171819input = __import__('sys').stdin.readlinefrom heapq import *n, m = map(int, input().split())adj = [[] for _ in range(n+1)]for i in range(m):a, b, t, w = map(int, input().split())adj[a].append((b, t, w))q = []; heappush(q, [0, 1])S = [float('inf')] * (n + 1); S[1] = 0while q:t, x = heappop(q)if S[x] != t: continueif x == n: print(t); exit()for nx, nt, w in adj[x]:val = t + nt + (0 if t % w == 0 else w - (t % w))if S[nx] > val:S[nx] = valheappush(q, [val, nx])cs 반응형'알고리즘 > BOJ' 카테고리의 다른 글
[BOJ 23288, Python 3] 주사위 굴리기 2 (0) 2021.10.25 [BOJ 23240, Python 3] Colorful Tower of Hanoi (0) 2021.10.13 [BOJ 23034, Python 3] 조별과제 멈춰! (0) 2021.10.05 [BOJ 20157, Python 3] 화살을 쏘자! (0) 2021.10.04 [BOJ 20158, Python 3] 사장님 달려가고 있습니다 (0) 2021.10.04