https://www.acmicpc.net/problem/18352
18352번: 특정 거리의 도시 찾기
첫째 줄에 도시의 개수 N, 도로의 개수 M, 거리 정보 K, 출발 도시의 번호 X가 주어진다. (2 ≤ N ≤ 300,000, 1 ≤ M ≤ 1,000,000, 1 ≤ K ≤ 300,000, 1 ≤ X ≤ N) 둘째 줄부터 M개의 줄에 걸쳐서 두 개
www.acmicpc.net
풀이
# 최단거리이므로 큐 자료구조 사용
from collections import deque
# 도시수, 도로수, 거리, 출발도시번호 입력
n,m,k,x = map(int, input().split())
# 각 도시가 어느 도시와 이어져있는지 표시를 위해 2차원 리스트
graph = [[] for _ in range(n+1)]
# a번 도시에서 b번 도시로 이어진다는 것을 입력받아 구현
for i in range(m):
a, b = map(int, input().split())
graph[a].append(b)
# x에서 각 도시의 거리 정보에 대한 리스트를 구현
distance = [-1]*(n+1)
# x도시는 자기자신으로 0
distance[x] = 0
# 큐 선언
q = deque([x])
# 큐가 빌때까지 반복
while q:
# 삽입된 순서대로 큐를 제거
now = q.popleft()
# 각 도시가 연결되어있는 도시를 선택
for next in graph[now]:
# 해당 도시의 거리가 -1로 입력되지않았을 때
if distance[next]==-1:
# 해당 도시까지 거리를 현재 도시로부터 +1 더해서 저장
distance[next] = distance[now] + 1
# 해당 도시를 큐에 삽입
q.append(next)
# 플래그 변수를 초기화
check = False
# 거리 정보 리스트를 탐색
for i in range(len(distance)):
# k와 같은 거리정보가 있을 때
if k == distance[i]:
# 그에 대한 인덱스를 출력
print(i)
# 플래그를 True로 변경
check = True
# 반약 같은 거리정보가 없을 때
if check == False:
# -1 출력
print(-1)
'코딩 > 백준 문제 (실버)' 카테고리의 다른 글
[백준/10828/C언어] 스택 _ 풀이 (2) | 2023.12.11 |
---|---|
[백준/10773/C언어] 제로 _ 풀이 (0) | 2023.09.21 |
[백준/28278/C언어] 스택 2 _ 풀이 (2) | 2023.09.20 |
[백준/11651/C언어] 좌표 정렬하기 2 _ 풀이 (0) | 2023.09.12 |
[백준/1427/C언어] 소트인사이드 _ 풀이 (0) | 2023.09.12 |