본문 바로가기
Python/코테 연습

18352

by soojitasan 2024. 8. 19. 18:20
## 🔒 문제. ## 18352 특정 거리의 도시 찾기
''' 입력 예시
## case 1.
N, M, K, X = 4, 4, 2, 1
road = [[],
        [2, 3],
        [3, 4],
        [],
        []
]

## case 2.
N, M, K, X = 4, 3, 2, 1
road = [[],
        [2, 3, 4],
        [],
        [],
        []
]

## case 3.
N, M, K, X = 4, 4, 1, 1
road = [[],
        [2, 3],
        [3, 4],
        [],
        []
]
'''
## case 1.
N, M, K, X = 4, 4, 2, 1
road = [[],
        [2, 3],
        [3, 4],
        [],
        []
]

#### 최단 거리 : bfs > deque 활용
from collections import deque

start = X  ## 초기값 세팅 : 시작 위치
to_do = deque()  ## 해야할 일 : 앞으로 더 갈 수 있는 도시
to_do.append(start)  ## 시작 위치에서부터 시작
distance = [float('inf')] * (N+1)  ## 거리값을 inf(무한대)로 초기화
distance[start] = 0 ## 시작 위치의 거리는 0으로 세팅

while to_do:
    now = to_do.popleft()  ## 해야할 일에서 현재 도시 추출
    for next_city in road[now]:  ## 현재 도시에서 연결된 여러 도시들에 대해 반복
        if distance[next_city] == float('inf'):  ## 연결된 도시 중 거리값이 무한대인 경우 (미방문)
            distance[next_city] = distance[now] + 1  ## 현재 도시에서까지의 거리 + 1
            to_do.append(next_city)  ## 연결된 도시의 연결된 도시들을 해야할 일에 추가

distance_result = [i for i, v in enumerate(distance) if v == K]  ## 최단거리가 K값과 정확히 일치하는 도시 추출

if distance_result == []:
    print(-1)  ## 최단거리가 K인 도시가 없는 경우 -1 리턴
else:
    while distance_result:
        print(distance_result.pop(0))