Algorithm/Baekjoon

[백준 18352] 특정 거리의 도시 찾기 (Python)

문제 링크 #

문제 해설 #

Idea #

  • BFS
  • 시작 노드 X부터 연결된 노드를 순차적으로 방문하면서 X로부터 떨어진 거리를 기록
  • 거리가 K와 같은 노드를 출력하고, 해당하는 노드가 없을 경우 -1을 출력
  • 거리가 K를 넘어가지 않는 노드에 대해서만 탐색하여 시간 단축

Time Complexity #

  • BFS: O(N+M) = 1,300,000

Data Size #

  • N: 2 <= int <= 300,000
  • M: 1 <= int <= 1,000,000
  • K: 1 <= int <= 300,000
  • X: 1 <= int <= N
  • A, B: 1 <= int <= N

해설 코드 #

python
from collections import deque
import sys
input = sys.stdin.readline

N, M, K, X = map(int, input().split())
nodes = [[] for _ in range(N+1)]
visited = [False] * (N+1)
dists = [0] * (N+1)

for _ in range(M):
    A, B = map(int, input().split())
    nodes[A].append(B)

queue = deque()
queue.append(X)
visited[X] = True

while queue:
    city = queue.popleft()

    for next in nodes[city]:
        if not visited[next] and dists[city] < K:
            queue.append(next)
            visited[next] = True
            dists[next] = dists[city]+1

targets = [i for i,d in enumerate(dists) if d==K]
if targets:
    for target in targets:
        print(target)
else:
    print(-1)
PREV [백준 2302] 극장 좌석 (Python) NEXT [백준 1495] 기타리스트 (Python)