๐Ÿ ํŒŒ์ด์ฌ ์ƒ์ดˆ์งœ

[BOJ][Python] ๋ฐฑ์ค€ 2644๋ฒˆ: ์ดŒ์ˆ˜๊ณ„์‚ฐ

์„ ๋‹ฌ 2024. 10. 17. 01:40
๋ฐ˜์‘ํ˜•

https://www.acmicpc.net/problem/2644

 

๋ฌธ์ œ

์šฐ๋ฆฌ ๋‚˜๋ผ๋Š” ๊ฐ€์กฑ ํ˜น์€ ์นœ์ฒ™๋“ค ์‚ฌ์ด์˜ ๊ด€๊ณ„๋ฅผ ์ดŒ์ˆ˜๋ผ๋Š” ๋‹จ์œ„๋กœ ํ‘œํ˜„ํ•˜๋Š” ๋…ํŠนํ•œ ๋ฌธํ™”๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. ์ด๋Ÿฌํ•œ ์ดŒ์ˆ˜๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ ๊ณ„์‚ฐ๋œ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ถ€๋ชจ์™€ ์ž์‹ ์‚ฌ์ด๋ฅผ 1์ดŒ์œผ๋กœ ์ •์˜ํ•˜๊ณ  ์ด๋กœ๋ถ€ํ„ฐ ์‚ฌ๋žŒ๋“ค ๊ฐ„์˜ ์ดŒ์ˆ˜๋ฅผ ๊ณ„์‚ฐํ•œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค๋ฉด ๋‚˜์™€ ์•„๋ฒ„์ง€, ์•„๋ฒ„์ง€์™€ ํ• ์•„๋ฒ„์ง€๋Š” ๊ฐ๊ฐ 1์ดŒ์œผ๋กœ ๋‚˜์™€ ํ• ์•„๋ฒ„์ง€๋Š” 2์ดŒ์ด ๋˜๊ณ , ์•„๋ฒ„์ง€ ํ˜•์ œ๋“ค๊ณผ ํ• ์•„๋ฒ„์ง€๋Š” 1์ดŒ, ๋‚˜์™€ ์•„๋ฒ„์ง€ ํ˜•์ œ๋“ค๊ณผ๋Š” 3์ดŒ์ด ๋œ๋‹ค.

์—ฌ๋Ÿฌ ์‚ฌ๋žŒ๋“ค์— ๋Œ€ํ•œ ๋ถ€๋ชจ ์ž์‹๋“ค ๊ฐ„์˜ ๊ด€๊ณ„๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ, ์ฃผ์–ด์ง„ ๋‘ ์‚ฌ๋žŒ์˜ ์ดŒ์ˆ˜๋ฅผ ๊ณ„์‚ฐํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

์ž…๋ ฅ

์‚ฌ๋žŒ๋“ค์€ 1, 2, 3, …, n (1 ≤ n ≤ 100)์˜ ์—ฐ์†๋œ ๋ฒˆํ˜ธ๋กœ ๊ฐ๊ฐ ํ‘œ์‹œ๋œ๋‹ค. ์ž…๋ ฅ ํŒŒ์ผ์˜ ์ฒซ์งธ ์ค„์—๋Š” ์ „์ฒด ์‚ฌ๋žŒ์˜ ์ˆ˜ n์ด ์ฃผ์–ด์ง€๊ณ , ๋‘˜์งธ ์ค„์—๋Š” ์ดŒ์ˆ˜๋ฅผ ๊ณ„์‚ฐํ•ด์•ผ ํ•˜๋Š” ์„œ๋กœ ๋‹ค๋ฅธ ๋‘ ์‚ฌ๋žŒ์˜ ๋ฒˆํ˜ธ๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์…‹์งธ ์ค„์—๋Š” ๋ถ€๋ชจ ์ž์‹๋“ค ๊ฐ„์˜ ๊ด€๊ณ„์˜ ๊ฐœ์ˆ˜ m์ด ์ฃผ์–ด์ง„๋‹ค. ๋„ท์งธ ์ค„๋ถ€ํ„ฐ๋Š” ๋ถ€๋ชจ ์ž์‹๊ฐ„์˜ ๊ด€๊ณ„๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๋‘ ๋ฒˆํ˜ธ x,y๊ฐ€ ๊ฐ ์ค„์— ๋‚˜์˜จ๋‹ค. ์ด๋•Œ ์•ž์— ๋‚˜์˜ค๋Š” ๋ฒˆํ˜ธ x๋Š” ๋’ค์— ๋‚˜์˜ค๋Š” ์ •์ˆ˜ y์˜ ๋ถ€๋ชจ ๋ฒˆํ˜ธ๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค.

๊ฐ ์‚ฌ๋žŒ์˜ ๋ถ€๋ชจ๋Š” ์ตœ๋Œ€ ํ•œ ๋ช…๋งŒ ์ฃผ์–ด์ง„๋‹ค.

์ถœ๋ ฅ

์ž…๋ ฅ์—์„œ ์š”๊ตฌํ•œ ๋‘ ์‚ฌ๋žŒ์˜ ์ดŒ์ˆ˜๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์ •์ˆ˜๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค. ์–ด๋–ค ๊ฒฝ์šฐ์—๋Š” ๋‘ ์‚ฌ๋žŒ์˜ ์นœ์ฒ™ ๊ด€๊ณ„๊ฐ€ ์ „ํ˜€ ์—†์–ด ์ดŒ์ˆ˜๋ฅผ ๊ณ„์‚ฐํ•  ์ˆ˜ ์—†์„ ๋•Œ๊ฐ€ ์žˆ๋‹ค. ์ด๋•Œ์—๋Š” -1์„ ์ถœ๋ ฅํ•ด์•ผ ํ•œ๋‹ค.

 

ํ’€์ด

๊ทธ๋ž˜ํ”„๋กœ ๊ฐ€์กฑ๊ด€๊ณ„๋ฅผ ์ €์žฅํ•œ๋‹ค. ํ•„์ž๋Š” ์ธ์ ‘๋ฆฌ์ŠคํŠธ๋ฅผ ์ด์šฉํ–ˆ๋‹ค.

๋ถ€๋ชจ-์ž์‹ ๊ด€๊ณ„๊ฐ€ ์žˆ๋Š”๋งŒํผ ๋ฐฉํ–ฅ์ด ์žˆ์„ ๊ฒƒ ๊ฐ™์ง€๋งŒ ๋ฌด๋ฐฉํ–ฅ์ธ๊ฒŒ ํฌ์ธํŠธ

from collections import deque

# input
n = int(input())
a,b = map(int, input().split())
graph = [[] for _ in range(n+1)]
m = int(input())
for i in range(m):
    x,y = map(int, input().split())
    graph[x].append(y)
    graph[y].append(x)

# bfs
distance = [-1 for _ in range(n+1)]
distance[a] = 0

queue = deque([a])

while len(queue)>0:
    cur = queue.popleft()
    
    for i in graph[cur]:
        if distance[i] == -1:
            queue.append(i)
            distance[i] = distance[cur] + 1

# output
print(distance[b])
๋ฐ˜์‘ํ˜•