๐Ÿ”ต ๋ฌธ์ œ 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)

+ Recent posts