Skip to content

Commit 0be0511

Browse files
committed
Update Study_BOJ_1238_ํŒŒํ‹ฐ.py
1 parent 3b3f8a0 commit 0be0511

File tree

4 files changed

+120
-0
lines changed

4 files changed

+120
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
'''
2+
BOJ #4485. ๋…น์ƒ‰ ์˜ท ์ž…์€ ์• ๊ฐ€ ์ ค๋‹ค์ง€?(๊ณจ๋“œ4)
3+
https://www.acmicpc.net/problem/4485
4+
#์œ ํ˜• : Dijkstra
5+
'''
6+
import sys
7+
import heapq
8+
9+
input = sys.stdin.readline
10+
11+
n = int(input())
12+
dx = [0, 1, -1, 0]
13+
dy = [1, 0, 0, -1]
14+
# ์ •๋‹ต ์ถœ๋ ฅ์„ ์œ„ํ•œ cnt ๋ณ€์ˆ˜
15+
cnt = 0
16+
# n์ด 0์ด๋ฉด ์ข…๋ฃŒ
17+
while n != 0:
18+
cnt += 1
19+
# ์ž…๋ ฅ
20+
board = [list(map(int, input().split())) for _ in range(n)]
21+
# ์ตœ์†Œ ๋น„์šฉ์œผ๋กœ ์ •๋ ฌํ•ด ์ค„ heap queue (์ด๊ฒƒ์„ ๊ธฐ์ค€์œผ๋กœ ํƒ์ƒ‰)
22+
heap = []
23+
# ๊ฐ€์ค‘์น˜๋ฅผ ์ €์žฅํ•ด์ค„ distance ํ…Œ์ด๋ธ”
24+
dist = [[1e9] * n for _ in range(n)]
25+
# [0][0]๋ถ€ํ„ฐ ์‹œ์ž‘
26+
dist[0][0] = board[0][0]
27+
heapq.heappush(heap, (board[0][0], 0, 0))
28+
29+
while heap:
30+
distance, y, x = heapq.heappop(heap)
31+
32+
#์ตœ์†Œ ๊ฐ€์ค‘์น˜๋ฅผ ๋จผ์ € ๊ฐ€๊ธฐ ๋•Œ๋ฌธ์— [N-1][N-1]์— ๋„์ฐฉํ•˜๋ฉด ๋ฐ”๋กœ ๋ฆฌํ„ด
33+
if y == n-1 and x == n-1:
34+
print("Problem", str(cnt)+":", distance)
35+
# n ๋ณ€์ˆ˜ ๋‹ค์‹œ ๋ฐ›๊ณ  break
36+
n = int(input())
37+
break
38+
# ์ƒํ•˜์ขŒ์šฐ ๋ฐฉํ–ฅ ํƒ์ƒ‰
39+
for i in range(4):
40+
ny = y + dy[i]
41+
nx = x + dx[i]
42+
43+
if 0 <= ny < n and 0 <= nx < n:
44+
cost = distance + board[ny][nx]
45+
# ์ด๋ฏธ ์ €์žฅ๋œ ๊ฐ€์ค‘์น˜๋ณด๋‹ค ํ˜„์žฌ ๊ฐ€์ค‘์น˜๊ฐ€ ๋‚ฎ์œผ๋ฉด ์—…๋ฐ์ดํŠธ
46+
if dist[ny][nx] > cost:
47+
dist[ny][nx] = distance + board[ny][nx]
48+
heapq.heappush(heap, (distance + board[ny][nx], ny, nx))
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
## ๐Ÿš€ 1์›” 5์ฃผ์ฐจ (01/20) ์Šคํ„ฐ๋”” ๋ฐœ์ œ ์ฃผ์ œ: Dijkstra
2+
> ๋ฐœ์ œ์ž: ๊น€ํ™์ฃผ
3+
4+
### ๐Ÿ—‚๏ธ ์Šคํ„ฐ๋”” ์ž๋ฃŒ
5+
- PDF: [๋ฐ”๋กœ๊ฐ€๊ธฐ](./Study_BOJ_1238.pdf)
6+
![image]()
7+
8+
9+
### ๐Ÿ“– ๋ฌธ์ œ
10+
- [๋ฐฑ์ค€ #1238. ํŒŒํ‹ฐ](https://www.acmicpc.net/problem/1238): ๋‹ค์ต์ŠคํŠธ๋ผ / ๊ณจ๋“œ3
11+
- ์ •๋‹ต ์ฝ”๋“œ: [Study_BOJ_1253_์ข‹๋‹ค.py](./Study_BOJ_1253_์ข‹๋‹ค.py)
12+
13+
### ๐Ÿ’ป ๊ณผ์ œ
14+
- [๋ฐฑ์ค€ #4485. ๋…น์ƒ‰ ์˜ท ์ž…์€ ์• ๊ฐ€ ์ ค๋‹ค์ง€?](https://www.acmicpc.net/problem/4485): ๋‹ค์ต์ŠคํŠธ๋ผ / ๊ณจ๋“œ4
15+
- ์ •๋‹ต ์ฝ”๋“œ: [Assignment_BOJ_4485_๋…น์ƒ‰ ์˜ท ์ž…์€์• ๊ฐ€ ์ ค๋‹ค์ง€.py](./Assignment_BOJ_4485_๋…น์ƒ‰์˜ท์ž…์€์• ๊ฐ€์ ค๋‹ค์ง€.py)
444 KB
Binary file not shown.
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
"""
2+
BOJ #1238. ํŒŒํ‹ฐ (๊ณจ๋“œ3)
3+
https://www.acmicpc.net/problem/1238
4+
์œ ํ˜•: Dijkstra
5+
"""
6+
7+
import sys
8+
import heapq
9+
# 1. ์ธ์ ‘ ๋ฆฌ์ŠคํŠธ field ๋งŒ๋“ค๊ธฐ (๋‹จ๋ฐฉํ–ฅ)
10+
input = sys.stdin.readline
11+
INF = int(1e9) #1<=Time<=100
12+
N , M , start_town = map(int , input().split()) # ์‹œ์ž‘ note
13+
# ๊ฐ road (edge)์™€ Time ์ •๋ณต๊ฐ€ ๋‹ด๊น€ ๋ฆฌ์ŠคํŠธ ๋งŒ๋“ค๊ธฐ
14+
field = [[] for _ in range(N+1) ] # idx : 1~ N+1
15+
#๋ฌดํ•œ์œผ๋กœ ์ตœ๋‹จ ๊ฑฐ๋ฆฌ ํ…Œ์ด๋ธ” ์ดˆ๊ธฐํ™”
16+
to_X_distance = [ [INF for _ in range(N+1)] for k in range(N+1)]
17+
18+
# 1-2. ๋ชจ๋“  road ๋ฐ time ์ •๋ณด ๋ฐ›๊ธฐ
19+
for m in range(M) :
20+
start , end , time = map(int, input().split())
21+
field[start].append((end, time))
22+
23+
24+
# ๋‹ค์ต์ŠคํŠธ๋ผ
25+
def dijkstra(start , distance ) :
26+
q = [] # ์šฐ์„ ์ˆœ์œ„ ํ
27+
#1. ์‹œ์ž‘ ๋…ธ๋“œ์— ๋Œ€ํ•ด ์ตœ๋‹จ๊ฒฝ๋กœ = 0 , ํ ์‚ฝ์ž…(์‹œ๊ฐ„ = 0 , ๋…ธ๋“œ)
28+
heapq.heappush(q , (0,start))
29+
distance[start] = 0
30+
#2. q๊ฐ€ ๋น„์–ด ์žˆ๊ธฐ ์ „๊นŒ์ง€
31+
while q :
32+
# ๊ฐ€์žฅ ์ตœ๋‹จ ๊ฑฐ๋ฆฌ ์งง์€ ๋…ธ๋“œ์— ๋Œ€ํ•œ ์ •๋ณด ์ถ”์ถœ
33+
time , now = heapq.heappop(q) # A -> now(์ค‘๊ฐ„)
34+
# ํ˜„์žฌ ๋…ธ๋“œ๊ฐ€ ์ด๋ฏธ ์ฒ˜๋ฆฌ = ๋ฐฉ๋ฌธ ์—ฌ๋ถ€ ํ™•์ธ
35+
if distance[now] < time :
36+
continue
37+
# ํ˜„์žฌ ๋…ธ๋“œ์™€ ์—ฐ๊ฒฐ๋œ ๋‹ค๋ฅธ ์ธ์ ‘ ๋…ธ๋“œ ํ™•์ธ
38+
for near_road , near_time in field[now] :
39+
duration = near_time + time # A -> now -> B
40+
#๊ธฐ์กด ๋ฐฉ๋ฒ• ๋ณด๋‹ค ํ˜„์žฌ ๋…ธ๋“œ ๊ฒฝ์œ ํ•ด์„œ ๊ฐˆ๋•Œ ์‹œ๊ฐ„์ด ์ ๊ฒŒ ๊ฑธ๋ฆด๋•Œ
41+
# ํ ์‚ฝ์ž… & ์ตœ๋‹จ๊ฑฐ๋ฆฌ ํ…Œ์ด๋ธ” ์—…๋ฐ์ดํŠธ
42+
if duration < distance[near_road] :
43+
distance[near_road] = duration # ์—…๋ฐ์ดํŠธ
44+
heapq.heappush(q , (duration , near_road)) # ํ์— ๋„ฃ๊ธฐ
45+
46+
return distance
47+
48+
# 1. N-1 ๋ฒˆ ๋‹ค์ต์ŠคํŠธ๋ผ ์ˆ˜ํ–‰ -> 2์ฐจ์› ์ตœ๋‹จ ๊ฑฐ๋ฆฌ ๋ฆฌ์ŠคํŠธ ๋งŒ๋“ฆ
49+
for i in range(1,N+1) :
50+
to_X_distance[i] = dijkstra(i,to_X_distance[i] )
51+
52+
#2. ๊ฐ ๋งˆ์„๋ณ„ ์™•๋ณต ์ตœ๋‹จ ์‹œ๊ฐ„ ๊ณ„์‚ฐ :{twon -> x} + {x-> town}
53+
result = [0 for _ in range(N+1)]
54+
for town in range(1,N+1):
55+
result[town] = to_X_distance[town][start_town] + to_X_distance[start_town][town]
56+
57+
print(max(result))

0 commit comments

Comments
ย (0)