Algorithm

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

salmon16 2021. 4. 20. 15:03

문제 : 18352번: 특정 거리의 도시 찾기 (acmicpc.net)

 

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

풀이 방법

그래프에서 최단 거리를 찾는 문제이다 최단 거리를 찾는 문제는 bfs를 생각해 볼 수 있다.

처음에는 edge의 입력을 이차원 list를 만들어서 연결되어있으면 1 안 되어 있으면 0으로 풀었는데 이러면

메모리 초과로 틀리게 된다 그러므로 2차원 벡터로 i 에서 j로 가는 edge가 있으면 edge[i].append(j) 이런 식으로

메모리를 최소화 해주었다.

queue를 사용해서 bfs를 구현해 주었다 visited를 -1로 초기화해두고(방문 안 한 경우)

방문을 한 경우는 이전 지역의 거리에서 + 1을 해주어 visited에 저장을 해주었다.

from _collections import deque

def sol(start):
    queue = deque()
    queue.append(start)
    visited[start] = 0
    while queue:
        index = queue.popleft()
        for i in edge[index]:
            if visited[i] == -1:
                visited[i] = visited[index] + 1
                queue.append(i)

N, M, K, X = map(int, input().split())
edge = [[] for _ in range(N + 1)]
visited = [-1] * (N + 1)
for i in range(M):
    i, j = map(int, input().split())
    edge[i].append(j)
ans = []
sol(X)
for i in range(1, N+1):
    if visited[i] == K:
        ans.append(i)
if len(ans) == 0:
    print(-1)
else:
    for i in range(len(ans)):
        print(ans[i])

'Algorithm' 카테고리의 다른 글

[백준] 미로탐색 2178번 (c++)  (0) 2021.05.26
[백준] 경쟁적 전염 18405번 (python)  (0) 2021.05.20
큰 수의 법칙 (python)  (0) 2021.04.15
[algospot] 두니발 박사의 탈옥 (c++)  (0) 2021.04.14
[백준] RGB거리 1149번 (c++)  (0) 2021.04.06