8000 update: 0x1D 24042.cpp · dkim-coder/basic-algo-lecture@7d0ef23 · GitHub
[go: up one dir, main page]

Skip to content

Commit 7d0ef23

Browse files
committed
update: 0x1D 24042.cpp
1 parent b89eaee commit 7d0ef23

File tree

1 file changed

+14
-15
lines changed

1 file changed

+14
-15
lines changed

0x1D/solutions/24042.cpp

Lines changed: 14 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
// Authored by : scsc3204
22
// Co-authored by : -
3-
// http://boj.kr/04d9d3317bb448f5b4de000f54bded50
3+
// http://boj.kr/8d181bd675584722a8beffeb4f4d5476
44
#include <bits/stdc++.h>
55
using namespace std;
66
using ll = long long;
@@ -32,15 +32,15 @@ int main() {
3232
pq.push({0, 1});
3333
dist[1] = 0;
3434
while(!pq.empty()) {
35-
auto [cd, u] = pq.top(); pq.pop();
36-
if(dist[u] != cd) continue;
37-
for(auto [rmd, v] : adj[u]) {
35+
auto [cd, cur] = pq.top(); pq.pop();
36+
if(dist[cur] != cd) continue;
37+
for(auto [rmd, nxt] : adj[cur]) {
3838
ll nd = (rmd - cd) % MOD;
3939
if (nd < 0) nd += MOD;
4040
nd += cd + 1;
41-
if(nd >= dist[v]) continue;
42-
dist[v] = nd;
43-
pq.push({nd, v});
41+
if(nd >= dist[nxt]) continue;
42+
dist[nxt] = nd;
43+
pq.push({nd, nxt});
4444
}
4545
}
4646
cout << dist[n];
@@ -51,8 +51,8 @@ dist를 초기화할 값을 결정하기 위해 가장 긴 최단거리를 고
5151
dist를 초기화할 때 활용하는 INF 값을 77'777'777'777으로 설정하였다(8번째 줄).
5252
그리고 이에 따라 dist는 long long으로 선언하였다.
5353
54-
정점 1에서 u까지 가는 확정된 최단 거리를 cd라 하자.
55-
횡단보도가 켜지는 때가 rmd인 정점으로 건너갈 수 있게 되는
54+
정점 1에서 cur까지 가는 확정된 최단 거리를 cd라 하자.
55+
횡단보도가 켜지는 때가 rmd인 정점 nxt로 건너갈 수 있게 되는
5656
가장 빠른 시점을 구해야 한다.
5757
5858
기다려야 하는 최소 시간을 x라고 하자.
@@ -61,12 +61,11 @@ x ≡ rmd - cd (mod MOD)이며,
6161
x는 (rmd - cd) % MOD로 나머지를 구할 수 있다.
6262
만약 이 값이 음수인 경우엔 MOD를 더하여 구할 수 있다(38-39번째 줄).
6363
64-
이 기다려야 하는 최소 시간 후에 1분 후 다음 정점에 도달할 수 있기 때문에,
65-
nd는 위에서 구한 x에 (cd + 1)을 하여 구할 수 있다.
66-
위 풀이에서는 x를 nd에 저장했으므로, 이를 40번째 줄과 같이 구했다.
67-
68-
만약 이렇게 구한 nd가 dist[v]보다 크거나 같다면 이 계산한 값을 무시하고,
69-
nd가 정점 1에서 v로 가는 새로운 최단거리라면 우선순위 큐에 넣는다(41-43번째 줄).
64+
이 기다려야 하는 최소 시간 후에 출발하여 1분 후 정점 nxt에 도달할 수 있으므로,
65+
정점 1에서 nxt로 가는 거리인 nd는 위에서 구한 x에 (cd + 1)을 더해 구할 수 있다.
66+
위 풀이에서는 x를 nd에 저장했으므로, nd += cd + 1;로 구했다(40번째 줄).
7067
68+
만약 이렇게 구한 nd가 dist[nxt]보다 크거나 같다면 이 계산한 값을 무시하고,
69+
nd가 정점 1에서 nxt로 가는 새로운 최단거리라면 우선순위 큐에 넣는다(41-43번째 줄).
7170
이 과정을 우선순위 큐가 빌 때까지 반복하고, dist[n]을 출력한다.
7271
*/

0 commit comments

Comments
 (0)
0