Skip to content

Commit 9ca82e0

Browse files
committed
[BOJ] #18352. 특정 거리의 도시 찾기 / 실버2 / 32분 / 성공
1 parent ae251bc commit 9ca82e0

File tree

1 file changed

+43
-0
lines changed

1 file changed

+43
-0
lines changed
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
import sys
2+
from collections import deque
3+
4+
input = sys.stdin.readline
5+
6+
7+
def bfs(start):
8+
queue = deque([start])
9+
answer = [] # 시작 도시에서 최단거리 k인 모든 도시 번호를 저장할 리스트
10+
visited[start] = 0 # 시작 노드 방문 표시 (시작노드는 거리 0)
11+
12+
while queue:
13+
current = queue.popleft()
14+
15+
# 현재 노드와 연결된 노드 탐색
16+
for node in graph[current]:
17+
if visited[node] == -1: # 아직 방문하지 않았다면 방문 처리하고 큐에 추가
18+
visited[node] = visited[current] + 1 # 현재 노드의 거리 + 1
19+
queue.append(node)
20+
21+
# 연결된 노드의 거리가 k와 같을 경우 answer에 추가
22+
if visited[node] == k:
23+
answer.append(node)
24+
return answer
25+
26+
27+
# 도시의 개수 n, 도로의 개수 m, 거리 정보 k, 출발도시 번호 x
28+
n, m, k, x = map(int, input().split())
29+
graph = [[] for _ in range(n + 1)] # 그래프
30+
visited = [-1] * (n + 1)
31+
32+
# 그래프 연결
33+
for _ in range(m):
34+
a, b = map(int, input().split())
35+
graph[a].append(b)
36+
37+
# 출발도시 번호 x부터 BFS 탐색
38+
answer = bfs(x)
39+
if answer:
40+
for ans in sorted(answer):
41+
print(ans)
42+
else:
43+
print(-1) # 최단거리 k인 도시가 하나도 존재하지 않으면 -1 출력

0 commit comments

Comments
 (0)