๐ต ๋ฌธ์ 1 : ๋ฏธ๋ ๋์
๐น ๋ฌธ์ ํด์ค :
์ด ๋ฌธ์ ๋ ์ ํ์ ์ธ ํ๋ก์ด๋ ์์ ์๊ณ ๋ฆฌ์ฆ ๋ฌธ์ ์ด๋ค. ํ์ฌ ๋ฌธ์ ์์ N์ ๋ฒ์๊ฐ 100์ผ๋ก ๋งค์ฐ ํ์ ์ ์ด๋ค. ๋ฐ๋ผ์ ํ๋ก์ด๋ ์์ ์๊ณ ๋ฆฌ์ฆ์ ์ด์ฉํด์๋ ๋น ๋ฅด๊ฒ ํ ์ ์๊ธฐ ๋๋ฌธ์, ๊ตฌํ์ด ๊ฐ๋จํ ํ๋ก์ด๋ ์์ ์๊ณ ๋ฆฌ์ฆ์ ์ด์ฉํ๋๊ฒ์ด ์ ๋ฆฌํ๋ค. ์ด ๋ฌธ์ ์ ํต์ฌ ์์ด๋์ด๋ 1๋ฒ ๋ ธ๋์์ X๋ฅผ ๊ฑฐ์ณ K๋ก ๊ฐ๋ ์ต๋จ ๊ฑฐ๋ฆฌ๋ (1๋ฒ ๋ ธ๋์์ X๊น์ง์ ์ต๋จ ๊ฑฐ๋ฆฌ + X์์ K๊น์ง์ ์ต๋จ ๊ฑฐ๋ฆฌ)๋ผ๋ ์ ์ด๋ค.
์ต๋จ ๊ฑฐ๋ฆฌ ๋ฌธ์ ๋ ๊ทธ๋ฆผ์ผ๋ก ๊ทธ๋ ค ๋ณด๋๊ฒ๋ ์ข์ ๋ฐฉ๋ฒ์ด๋ค.
INF = int(1e9) #๋ฌดํ์ ์๋ฏธํ๋ ๊ฐ์ผ๋ก 10์ต์ ์ค์
#๋
ธ๋์ ์ ๋ฐ ๊ฐ์ ์ ๊ฐ์๋ฅผ ์
๋ ฅ๋ฐ๊ธฐ
n, m = map(int, input().split())
#2์ฐจ์ ๋ฆฌ์คํธ(๊ทธ๋ํ ํํ)๋ฅผ ๋ง๋ค๊ณ , ๋ชจ๋ ๊ฐ์ ๋ฌดํ์ผ๋ก ์ด๊ธฐํ
graph = [[INF] for i in range(n + 1)]
#์๊ธฐ ์์ ์์ ์๊ธฐ ์์ ์ผ๋ก ๊ฐ๋ ๋น์ฉ์ 0์ผ๋ก ์ด๊ธฐํ
for a in range(1, n + 1):
for b in range(1, n + 1):
if a == b:
graph[a][b] = 0
#๊ฐ ๊ฐ์ ์ ๋ํ ์ ๋ณด๋ฅผ ์
๋ ฅ๋ฐ์, ๊ทธ ๊ฐ์ผ๋ก ์ด๊ธฐํ
for_ in range(m):
#A์ B๊ฐ ์๋ก์๊ฒ ๊ฐ๋ ๋น์ฉ์ 1์ด๋ผ๊ณ ์ค์
a, b = map(int, input().split())
graph[a][b] = 1
graph[b][a] = 1
#๊ฑฐ์ณ ๊ฐ ๋
ธ๋ x์ ์ต์ข
๋
ธ๋ K๋ฅผ ์
๋ ฅ๋ฐ๊ธฐ
x, k = map(int, input().split())
#์ ํ์์ ๋ฐ๋ผ ํ๋ก์ด๋ ์์
์๊ณ ๋ฆฌ์ฆ ์ํ
for k in range(1, n + 1):
for a in range(1, n + 1):
for b in range(1, n + 1):
graph[a][b] = min(graph[a][b], graph[a][k] + graph[k][b])
#์ํ๋ ๊ฒฐ๊ณผ๋ฅผ ์ถ๋ ฅ
distance = graph[1][k] + graph[k][x]
#๋๋ฌ ํ ์ ์๋๊ฒฝ์ฐ, -1์ ์ถ๋ ฅ
if distance >= INF:
print("-1")
else :
print(distance)
๐ต ๋ฌธ์ 2 : ์ ๋ณด
import heapq
import sys
input = sys.stdin.readline
INF = int(1e9) # ๋ฌดํ์ ์๋ฏธํ๋ ๊ฐ์ผ๋ก 10์ต์ ์ค์
# ๋
ธ๋์ ๊ฐ์, ๊ฐ์ ์ ๊ฐ์, ์์ ๋
ธ๋๋ฅผ ์
๋ ฅ๋ฐ๊ธฐ
n, m, start = map(int, input().split())
# ๊ฐ ๋
ธ๋์ ์ฐ๊ฒฐ๋์ด ์๋ ๋
ธ๋์ ๋ํ ์ ๋ณด๋ฅผ ๋ด๋ ๋ฆฌ์คํธ๋ฅผ ๋ง๋ค๊ธฐ
graph = [[] for i in range(n + 1)]
# ์ต๋จ ๊ฑฐ๋ฆฌ ํ
์ด๋ธ์ ๋ชจ๋ ๋ฌดํ์ผ๋ก ์ด๊ธฐํ
distance = [INF] * (n + 1)
# ๋ชจ๋ ๊ฐ์ ์ ๋ณด๋ฅผ ์
๋ ฅ๋ฐ๊ธฐ
for _ in range(m):
x, y, z = map(int, input().split())
# x๋ฒ ๋
ธ๋์์ y๋ฒ ๋
ธ๋๋ก ๊ฐ๋ ๋น์ฉ์ด z๋ผ๋ ์๋ฏธ
graph[x].append((y, z))
def dijkstra(start):
q = []
# ์์ ๋
ธ๋๋ก ๊ฐ๊ธฐ ์ํ ์ต๋จ ๊ฒฝ๋ก๋ 0์ผ๋ก ์ค์ ํ์ฌ, ํ์ ์ฝ์
heapq.heappush(q, (0, start))
distance[start] = 0
while q: # ํ๊ฐ ๋น์ด์์ง ์๋ค๋ฉด
# ๊ฐ์ฅ ์ต๋จ ๊ฑฐ๋ฆฌ๊ฐ ์งง์ ๋
ธ๋์ ๋ํ ์ ๋ณด๋ฅผ ๊บผ๋ด๊ธฐ
dist, now = heapq.heappop(q)
if distance[now] < dist:
continue
# ํ์ฌ ๋
ธ๋์ ์ฐ๊ฒฐ๋ ๋ค๋ฅธ ์ธ์ ํ ๋
ธ๋๋ค์ ํ์ธ
for i in graph[now]:
cost = dist + i[1]
# ํ์ฌ ๋
ธ๋๋ฅผ ๊ฑฐ์ณ์, ๋ค๋ฅธ ๋
ธ๋๋ก ์ด๋ํ๋ ๊ฑฐ๋ฆฌ๊ฐ ๋ ์งง์ ๊ฒฝ์ฐ
if cost < distance[i[0]]:
distance[i[0]] = cost
heapq.heappush(q, (cost, i[0]))
# ๋ค์ต์คํธ๋ผ ์๊ณ ๋ฆฌ์ฆ์ ์ํ
dijkstra(start)
# ๋๋ฌํ ์ ์๋ ๋
ธ๋์ ๊ฐ์
count = 0
# ๋๋ฌํ ์ ์๋ ๋
ธ๋ ์ค์์, ๊ฐ์ฅ ๋ฉ๋ฆฌ ์๋ ๋
ธ๋์์ ์ต๋จ ๊ฑฐ๋ฆฌ
max_distance = 0
for d in distance:
# ๋๋ฌํ ์ ์๋ ๋
ธ๋์ธ ๊ฒฝ์ฐ
if d != INF:
count += 1
max_distance = max(max_distance, d)
# ์์ ๋
ธ๋๋ ์ ์ธํด์ผ ํ๋ฏ๋ก count - 1์ ์ถ๋ ฅ
print(count - 1, max_distance)
'์๊ณ ๋ฆฌ์ฆ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์๋ฃ๊ตฌ์กฐ] ์ต์ํ / ์ต๋ํ (0) | 2024.10.17 |
---|---|
[Python] lambda ํจ์์ ์ฌ์ฉ๋ฒ (0) | 2024.10.17 |
[Algorithm] ์ต๋จ ๊ฒฝ๋ก - ํ๋ก์ด๋ ์์ ์๊ณ ๋ฆฌ์ฆ(2) (4) | 2024.07.25 |
[Algorithm] ์ต๋จ ๊ฒฝ๋ก - ๋ค์ต์คํธ๋ผ ์ต๋จ ๊ฒฝ๋ก ์๊ณ ๋ฆฌ์ฆ(1) (11) | 2024.07.24 |
[Algorithm]๋์ ํ๋ก๊ทธ๋๋ฐ(Dynamic Programming) (0) | 2024.07.17 |