그래프의 표현 예제 - 1

문제 분석

  • 모든 도로의 거리가 1이므로 가중치가 없는 인접 리스트로 이 그래프를 표현할 수 있다.

  • 도시와 개수가 300,000, 도로의 최대 크기가 1,000,000이므로 BFS 탐색을 수행하면 시간 복잡도 안에서 해결할 수 있다.

손으로 풀어보기

  1. 인접 리스트로 도시와 도로 데이터의 그래프를 구현한다.

  2. BFS 탐색 알고리즘으로 탐색을 수행하면서 각 도시로 가는 최단 거릿값을 방문 리스트에 저장한다. 최초에 방문하는 도시(X)는 이동하지 않으므로 방문 리스트에 0을 저장하고, 이후 방문하는 도시는 이전 도시의 방문 리스트값 +1을 방문 리스트에 저장하는 방식으로 이동 거리를 저장한다.

  3. 탐색 종료 후 방문 리스트에서 값이 K와 같은 도시의 번호를 모두 출력한다.

슈도코드

n(노드 개수) m(에지 개수) k(목표 거리) x(시작 노드)
A(인접 리스트)
ans(정답 리스트)
visit(방문 기록 리스트)  # -1로 초기화

BFS:
    큐에 시작 노드 삽입
    visit 현재 노드 방문 기록  # 거리 저장 형태로 1 증가
    while 큐가 비어 있을 때까지:
        큐에서 노드 데이터 가져오기
        if 현재 노드의 연결 노드 중 미 방문 노드:
            visit 리스트값 1 증가
            큐에 노드 삽입

for m 반복:
    A 인접 리스트에 데이터 저장
    
BFS(x) 실행

for n 반복:
    방문 거리가 k인 노드의 숫자를 정답 리스트에 더하기

정답 리스트 오름차순 정렬 후 순차 출력

코드 구현 - 파이썬

코드 구현 - 자바

Last updated