Skip to content

Commit 06d1790

Browse files
authored
Merge pull request #233 from AlgorithmStudy-Allumbus/hongjoo
Upload W28(06.23.2025)
2 parents b92e647 + 8326392 commit 06d1790

File tree

4 files changed

+117
-0
lines changed

4 files changed

+117
-0
lines changed
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
"""
2+
BOJ #1753. ์ตœ๋‹จ๊ฒฝ๋กœ (๊ณจ๋“œ4)
3+
https://www.acmicpc.net/problem/1753
4+
์œ ํ˜•: Dijkstra , Graph
5+
"""
6+
import sys
7+
import heapq
8+
input = sys.stdin.readline
9+
INF = 1e12
10+
V , E = map(int, input().split())
11+
start = int(input())
12+
13+
graph = [[] for _ in range(V+1)]
14+
for _ in range(E) :
15+
a,b , c =map(int, input().split())
16+
graph[a].append((b,c))
17+
18+
distance = [INF]*(V+1)
19+
# ๋‹ค์ต์ŠคํŠธ๋ผ ํ•จ์ˆ˜
20+
def dijkstra(start) :
21+
q = []
22+
distance[start]=0
23+
heapq.heappush(q,(0,start))
24+
while q :
25+
# 2.๊ฒฝ์œ ์ง€ ๋ฝ‘๊ธฐ
26+
dist , now = heapq.heappop(q)
27+
# 3-1. ์ด๋ฏธ ์ฒ˜๋ฆฌํ•œ ๊ฒฝ์œ ์ง€์ธ ๊ฒฝ์šฐ -> ๋ฌด์‹œ
28+
if distance[now] < dist :
29+
continue
30+
#3-2. ํ˜„์žฌ ๊ฒฝ์œ ์ง€์—์„œ ๋ฐ”๋กœ ๊ฐˆ ์ˆ˜ ์žˆ๋Š” ๋…ธ๋“œ ์ฒ˜๋ฆฌ
31+
for t in graph[now]:
32+
cost = dist + t[1] # ๊ฒฝ์œ ์ง€๋ฅผ ๊ฑฐ์นœ start - t[0] ์˜ ๊ฑฐ๋ฆฌ
33+
if cost < distance[t[0]] : # ๊ฒฝ์œ ์ง€ cost ๊ฐ€ ๋” ์ž‘์œผ๋ฉด ์—…๋ฐ์ดํŠธ
34+
distance[t[0]] = cost
35+
heapq.heappush(q, (cost , t[0]))
36+
#4. ์ถœ๋ ฅ
37+
dijkstra(start)
38+
for node in range(1 , V+1) :
39+
print("INF"if distance[node] >= INF else distance[node] )
40+
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
## ๐Ÿš€6์›” 4์ฃผ์ฐจ (6/23) ์Šคํ„ฐ๋”” ๋ฐœ์ œ ์ฃผ์ œ: Dijkstra
2+
> ๋ฐœ์ œ์ž: ๊น€ํ™์ฃผ (zaqquum)
3+
4+
> [!NOTE]
5+
> ์ฃผ์ œ: Dijkstra
6+
7+
### ๐Ÿ—‚๏ธ ์Šคํ„ฐ๋”” ์ž๋ฃŒ
8+
- PDF: [๋ฐ”๋กœ๊ฐ€๊ธฐ
9+
](Study_BOJ_1504.pdf)
10+
11+
### ๐Ÿ“– ๋ฌธ์ œ
12+
- [๋ฐฑ์ค€ #1504. ํŠน์ •ํ•œ ์ตœ๋‹จ๊ฒฝ๋กœ](https://www.acmicpc.net/problem/1504): Dijkstra / ๊ณจ๋“œ 4
13+
- ์ •๋‹ต ์ฝ”๋“œ: [Study_BOJ_1504_ํŠน์ •ํ•œ์ตœ๋‹จ๊ฒฝ๋กœ.py](Study_BOJ_1504_ํŠน์ •ํ•œ์ตœ๋‹จ๊ฒฝ๋กœ.py)
14+
### ๐Ÿ’ป ๊ณผ์ œ
15+
- [๋ฐฑ์ค€ #1753. ์ตœ๋‹จ๊ฒฝ๋กœ](https://www.acmicpc.net/problem/1753): Dijkstra / ๊ณจ๋“œ4
16+
- ์ •๋‹ต ์ฝ”๋“œ: [Assignment_BOJ_1753_์ตœ๋‹จ๊ฒฝ๋กœ.py](Assignment_BOJ_1753_์ตœ๋‹จ๊ฒฝ๋กœ.py)
Binary file not shown.
Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
"""
2+
BOJ #1504. ํŠน์ •ํ•œ ์ตœ๋‹จ๊ฒฝ๋กœ (๊ณจ๋“œ4)
3+
https://www.acmicpc.net/problem/1504
4+
์œ ํ˜•: Dijkstra , Graph
5+
"""
6+
import sys
7+
import heapq
8+
from collections import deque
9+
10+
INF = 1e9
11+
input = sys.stdin.readline
12+
answer = -1
13+
# 0. ์ž…๋ ฅ ๋ณ€์ˆ˜
14+
N ,E = map(int, input().split())
15+
graph =[[] for _ in range(N+1)] #์ธ์ ‘๋ฆฌ์ŠคํŠธ ์ดˆ๊ธฐํ™”
16+
for i in range(E) :
17+
a, b , cost = map(int, input().split())
18+
graph[a].append([b , cost ]) ; graph[b].append([a, cost])
19+
v1 ,v2 = map(int, input().split())
20+
21+
#1. ๋‹ค์ต์ŠคํŠธ๋ผ ์ดˆ๊ธฐ ์„ค์ • - ์‹œ์ž‘์ 
22+
start =1 ; target = N
23+
24+
#2. ๋‹ค์ต์ŠคํŠธ๋ผ ํ•จ์ˆ˜ ์ •์˜
25+
def dikstra(start) :
26+
# ์ตœ๋‹จ ๊ฑฐ๋ฆฌ ํ…Œ์ด๋ธ” ์ดˆ๊ธฐํ™”
27+
distance =[INF]*(N+1)
28+
q = []
29+
heapq.heappush(q, (0,start))
30+
distance[start] = 0
31+
#[2] ๊ฒฝ์œ ์ง€ ์„ ํƒ
32+
while q :
33+
dist , now = heapq.heappop(q)
34+
#3-1 ํ˜„์žฌ ๋…ธ๋“œ๊ฐ€ ์ด๋ฏธ ์—…๋ฐ์ดํŠธ ์™„๋ฃŒ๋˜๋ฉด ๋ฌด์‹œ
35+
if distance[now] <dist :
36+
continue
37+
#3-2. ํ˜„์žฌ ๋…ธ๋“œ์™€ ์ธ์ ‘ํ•œ ๋…ธ๋“œ ํ™•์ธ , ๋ฐฉ๋ฌธ
38+
for i in graph[now] :
39+
cost = dist + i[1]
40+
# 4. ํ˜„์žฌ ๋…ธ๋“œ now์„ ๊ฒฝ์œ ํ•ด์„œ , ๋‹ค๋ฅธ ๋…ธ๋“œ(i)๋กœ ์ด๋™ํ•˜๋Š” ๊ฑฐ๋ฆฌ๊ฐ€ ๋” ์งง์€ ๊ฒฝ์šฐ
41+
if cost <distance[i[0]] :
42+
distance[i[0]] = cost # ์—…๋ฐ์ดํŠธ
43+
heapq.heappush(q , (cost ,i[0]))
44+
return distance
45+
46+
# 3. v1,v2 ์ง€๋‚˜๋Š” 1- > N ์˜ ์ตœ๋‹จ ๊ฑฐ๋ฆฌ ๊ณ ๋ฅด๊ธฐ
47+
s_distance = dikstra(start)
48+
e_distance = dikstra(target) # ์–‘๋ฐฉํ–ฅ
49+
s_v1 = s_distance[v1]
50+
s_v2 = s_distance[v2]
51+
v1_e = e_distance[v1]
52+
v2_e = e_distance[v2]
53+
v1_v2 = dikstra(v1)[v2] # v1 - v2 ๊ฑฐ๋ฆฌ(๊ณตํ†ต)
54+
55+
answer =min(s_v1 + v2_e , s_v2+v1_e ) + v1_v2
56+
if answer >= INF :
57+
print(-1)
58+
else :
59+
print(answer)
60+
61+

0 commit comments

Comments
ย (0)