Skip to content

Commit 556126e

Browse files
authored
Merge pull request #133 from zaqquum/main
Hongjoo/2์›” 1์ฃผ์ฐจ/2๋ฌธ์ œ
2 parents 7335f3f + 0be0511 commit 556126e

File tree

6 files changed

+252
-0
lines changed

6 files changed

+252
-0
lines changed
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
"""
2+
[BOJ]_4485 ๋…น์ƒ‰ ์˜ท ์ž…์€ ์• ๊ฐ€ ์ ค๋‹ค์ง€?_Gold4
3+
https://solved.ac/problems/tags/dijkstra?sort=solved&direction=desc&page=1
4+
#์œ ํ˜• : Dijkstra
5+
#์ œ์ถœ๋‚ ์งœ : 01.27.2025
6+
7+
https://velog.io/@victoriapasta/BOJ-4485-%EB%85%B9%EC%83%89-%EC%98%B7-%EC%9E%85%EC%9D%80-%EC%95%A0%EA%B0%80-%EC%A0%A4%EB%8B%A4%EC%A7%80
8+
"""
9+
"""
10+
11+
12+
"""
13+
import sys
14+
import heapq
15+
16+
input = sys.stdin.readline
17+
18+
n = int(input())
19+
dx = [0, 1, -1, 0]
20+
dy = [1, 0, 0, -1]
21+
# ์ •๋‹ต ์ถœ๋ ฅ์„ ์œ„ํ•œ cnt ๋ณ€์ˆ˜
22+
cnt = 0
23+
# n์ด 0์ด๋ฉด ์ข…๋ฃŒ
24+
while n != 0:
25+
cnt += 1
26+
# ์ž…๋ ฅ
27+
board = [list(map(int, input().split())) for _ in range(n)]
28+
# ์ตœ์†Œ ๋น„์šฉ์œผ๋กœ ์ •๋ ฌํ•ด ์ค„ heap queue (์ด๊ฒƒ์„ ๊ธฐ์ค€์œผ๋กœ ํƒ์ƒ‰)
29+
heap = []
30+
# ๊ฐ€์ค‘์น˜๋ฅผ ์ €์žฅํ•ด์ค„ distance ํ…Œ์ด๋ธ”
31+
dist = [[1e9] * n for _ in range(n)]
32+
# [0][0]๋ถ€ํ„ฐ ์‹œ์ž‘
33+
dist[0][0] = board[0][0]
34+
heapq.heappush(heap, (board[0][0], 0, 0))
35+
36+
while heap:
37+
distance, y, x = heapq.heappop(heap)
38+
39+
#์ตœ์†Œ ๊ฐ€์ค‘์น˜๋ฅผ ๋จผ์ € ๊ฐ€๊ธฐ ๋•Œ๋ฌธ์— [N-1][N-1]์— ๋„์ฐฉํ•˜๋ฉด ๋ฐ”๋กœ ๋ฆฌํ„ด
40+
if y == n-1 and x == n-1:
41+
print("Problem", str(cnt)+":", distance)
42+
# n ๋ณ€์ˆ˜ ๋‹ค์‹œ ๋ฐ›๊ณ  break
43+
n = int(input())
44+
break
45+
# ์ƒํ•˜์ขŒ์šฐ ๋ฐฉํ–ฅ ํƒ์ƒ‰
46+
for i in range(4):
47+
ny = y + dy[i]
48+
nx = x + dx[i]
49+
50+
if 0 <= ny < n and 0 <= nx < n:
51+
cost = distance + board[ny][nx]
52+
# ์ด๋ฏธ ์ €์žฅ๋œ ๊ฐ€์ค‘์น˜๋ณด๋‹ค ํ˜„์žฌ ๊ฐ€์ค‘์น˜๊ฐ€ ๋‚ฎ์œผ๋ฉด ์—…๋ฐ์ดํŠธ
53+
if dist[ny][nx] > cost:
54+
dist[ny][nx] = distance + board[ny][nx]
55+
heapq.heappush(heap, (distance + board[ny][nx], ny, nx))
Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
"""
2+
3+
https://www.acmicpc.net/problem/1238
4+
5+
goal : ๊ฐ N ๊ฐœ์˜ ๋งˆ์„์—์„œ X (๋žœ๋ค)์„ ์™•๋ณตํ•˜๋Š” ์ตœ๋‹จ ๊ฑฐ๋ฆฌ ๊ณ„์‚ฐ -> ์ตœ๋Œ€๊ฐ’ ๋ฐ˜ํ™˜
6+
- ์กฐ๊ฑด
7+
1. ๋‹จ๋ฐฉํ–ฅ M๊ฐœ์˜ ๊ธธ : root
8+
2. ์™•๋ณต ์ตœ๋‹จ ๊ฑฐ๋ฆฌ ๊ณ ๋ ค
9+
(1) ๊ฐœ๋ณ„ N ๊ฐœ -> X ์ตœ๋‹จ ๊ฑฐ๋ฆฌ
10+
(2) X -> ๊ฐœ๋ณ„ N ๊ฐœ ์ตœ๋‹จ ๊ฑฐ๋ฆฌ
11+
์˜ ์ดํ•ฉ ์ค‘ ์ตœ๋Œ€๊ฐ’
12+
13+
3. ์™•๋ณต ๊ธธ์€ ๊ฐ™์•„๋„, ๋‹ฌ๋ผ๋„ ์ƒ๊ด€ ์—†์Œ -> ๋‹จ๋ฐฉํ–ฅ์ด๋ผ ์งœํ”ผ ๋‹ค๋ฅธ ๋ฃจํŠธ ์‚ฌ์šฉ
14+
15+
- ์œ ํ˜• : ํ’€์ด 2๊ฐ€์ง€ ์žˆ์Œ
16+
1. ๋‹ค์ต์ŠคํŠธ๋ผ
17+
2 .ํ”Œ๋กœ์ด๋“œ ์›Œ์ƒฌ
18+
19+
FLOW
20+
(1) ๊ฐœ๋ณ„ N ๊ฐœ -> X ์ตœ๋‹จ ๊ฑฐ๋ฆฌ
21+
(2) X -> ๊ฐœ๋ณ„ N ๊ฐœ ์ตœ๋‹จ ๊ฑฐ๋ฆฌ
22+
23+
"""
24+
import sys
25+
import heapq
26+
# 1. ์ธ์ ‘ ๋ฆฌ์ŠคํŠธ field ๋งŒ๋“ค๊ธฐ (๋‹จ๋ฐฉํ–ฅ)
27+
input = sys.stdin.readline
28+
INF = int(1e9) #1<=Time<=100
29+
N , M , start_town = map(int , input().split()) # ์‹œ์ž‘ note
30+
# ๊ฐ road (edge)์™€ Time ์ •๋ณต๊ฐ€ ๋‹ด๊น€ ๋ฆฌ์ŠคํŠธ ๋งŒ๋“ค๊ธฐ
31+
field = [[] for _ in range(N+1) ] # idx : 1~ N+1
32+
#๋ฌดํ•œ์œผ๋กœ ์ตœ๋‹จ ๊ฑฐ๋ฆฌ ํ…Œ์ด๋ธ” ์ดˆ๊ธฐํ™”
33+
to_X_distance = [ [INF for _ in range(N+1)] for k in range(N+1)]
34+
# 1-2. ๋ชจ๋“  road ๋ฐ time ์ •๋ณด ๋ฐ›๊ธฐ
35+
36+
for m in range(M) :
37+
start , end , time = map(int, input().split())
38+
field[start].append((end, time))
39+
40+
41+
# ๋‹ค์ต์ŠคํŠธ๋ผ
42+
def dijkstra(start , distance ) :
43+
q = [] # ์šฐ์„ ์ˆœ์œ„ ํ
44+
#1. ์‹œ์ž‘ ๋…ธ๋“œ์— ๋Œ€ํ•ด ์ตœ๋‹จ๊ฒฝ๋กœ = 0 , ํ ์‚ฝ์ž…(์‹œ๊ฐ„ = 0 , ๋…ธ๋“œ)
45+
heapq.heappush(q , (0,start))
46+
distance[start] = 0
47+
#2. q๊ฐ€ ๋น„์–ด ์žˆ๊ธฐ ์ „๊นŒ์ง€
48+
while q :
49+
# ๊ฐ€์žฅ ์ตœ๋‹จ ๊ฑฐ๋ฆฌ ์งง์€ ๋…ธ๋“œ์— ๋Œ€ํ•œ ์ •๋ณด ์ถ”์ถœ
50+
time , now = heapq.heappop(q) # A -> now(์ค‘๊ฐ„)
51+
# ํ˜„์žฌ ๋…ธ๋“œ๊ฐ€ ์ด๋ฏธ ์ฒ˜๋ฆฌ = ๋ฐฉ๋ฌธ ์—ฌ๋ถ€ ํ™•์ธ
52+
if distance[now] < time :
53+
continue
54+
# ํ˜„์žฌ ๋…ธ๋“œ์™€ ์—ฐ๊ฒฐ๋œ ๋‹ค๋ฅธ ์ธ์ ‘ ๋…ธ๋“œ ํ™•์ธ
55+
for near_road , near_time in field[now] :
56+
duration = near_time + time # A -> now -> B
57+
#๊ธฐ์กด ๋ฐฉ๋ฒ• ๋ณด๋‹ค ํ˜„์žฌ ๋…ธ๋“œ ๊ฒฝ์œ ํ•ด์„œ ๊ฐˆ๋•Œ ์‹œ๊ฐ„์ด ์ ๊ฒŒ ๊ฑธ๋ฆด๋•Œ
58+
# ํ ์‚ฝ์ž… & ์ตœ๋‹จ๊ฑฐ๋ฆฌ ํ…Œ์ด๋ธ” ์—…๋ฐ์ดํŠธ
59+
if duration < distance[near_road] :
60+
distance[near_road] = duration # ์—…๋ฐ์ดํŠธ
61+
heapq.heappush(q , (duration , near_road)) # ํ์— ๋„ฃ๊ธฐ
62+
63+
return distance
64+
65+
# N-1 ๋ฒˆ ๋‹ค์ต์ŠคํŠธ๋ผ ์ˆ˜ํ–‰
66+
for i in range(1,N+1) :
67+
to_X_distance[i] = dijkstra(i,to_X_distance[i] )
68+
69+
# 1. X -> N ๋Œ์–ด๊ฐ
70+
# go_X_distance = to_X_distance[start_town]
71+
72+
# 2. N ->X ๋กœ ์ถœ๋ฐœ
73+
result = [0 for _ in range(N+1)]
74+
for town in range(1,N+1):
75+
result[town] = to_X_distance[town][start_town] + to_X_distance[start_town][town] # {twon -> x} + {x-> town} : ๊ฐ ๋งˆ์„๋ณ„ ์™•๋ณต ์ตœ๋‹จ ์‹œ๊ฐ„
76+
77+
print(max(result))
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)