[Baekjoon] 환승 / Python, 파이썬 / 5214
2022. 12. 21. 03:14ㆍBaekjoon/Gold
728x90
반응형
https://www.acmicpc.net/problem/5214
5214번: 환승
첫째 줄에 역의 수 N과 한 하이퍼튜브가 서로 연결하는 역의 개수 K, 하이퍼튜브의 개수 M이 주어진다. (1 ≤ N ≤ 100,000, 1 ≤ K, M ≤ 1000) 다음 M개 줄에는 하이퍼튜브의 정보가 한 줄에 하나씩 주어
www.acmicpc.net
문제 설명
더보기
문제
아주 먼 미래에 사람들이 가장 많이 사용하는 대중교통은 하이퍼튜브이다. 하이퍼튜브 하나는 역 K개를 서로 연결한다. 1번역에서 N번역으로 가는데 방문하는 최소 역의 수는 몇 개일까?
입력
첫째 줄에 역의 수 N과 한 하이퍼튜브가 서로 연결하는 역의 개수 K, 하이퍼튜브의 개수 M이 주어진다. (1 ≤ N ≤ 100,000, 1 ≤ K, M ≤ 1000)
다음 M개 줄에는 하이퍼튜브의 정보가 한 줄에 하나씩 주어진다. 총 K개 숫자가 주어지며, 이 숫자는 그 하이퍼튜브가 서로 연결하는 역의 번호이다.
출력
첫째 줄에 1번역에서 N번역으로 가는데 방문하는 역의 개수의 최솟값을 출력한다. 만약, 갈 수 없다면 -1을 출력한다.
예제 입력 1
9 3 5
1 2 3
1 4 5
3 6 7
5 6 7
6 8 9
예제 출력 1
4
1-3-6-9나 1-5-6-9로 이동하면 된다.
예제 입력 2
15 8 4
11 12 8 14 13 6 10 7
1 5 8 12 13 6 2 4
10 15 4 5 9 8 14 12
11 12 14 3 5 6 1 13
예제 출력 2
3
문제 풀이
import sys
from collections import deque
input = sys.stdin.readline
N, K, M = map(int, input().split())
graph = [[] for _ in range(N + M + 1)]
for i in range(1, M + 1):
data = list(map(int, input().split()))
for x in data:
graph[x].append(N + i)
graph[N + i].append(x)
visited = set([1])
q = deque([(0, 1)])
found = False
while q:
cost, now = q.popleft()
if now == N:
print(cost // 2 + 1)
found = True
break
for y in graph[now]:
if y not in visited:
q.append((cost+1, y))
visited.add(y)
if not found:
print(-1)
728x90
반응형
'Baekjoon > Gold' 카테고리의 다른 글
[Baekjoon] 물통 / Python, 파이썬 / 14867 (0) | 2022.12.24 |
---|---|
[Baekjoon] 4연산 / Python, 파이썬 / 14395 (0) | 2022.12.22 |
[Baekjoon] 이분 그래프 / Python, 파이썬 / 1707 (0) | 2022.12.21 |
[Baekjoon] 트리 / Python, 파이썬 / 4803 (1) | 2022.12.21 |
[Baekjoon] 숫자고르기 / Python, 파이썬 / 2668 (0) | 2022.12.20 |