728x90
반응형
1. 문제 설명
2. 풀이과정
해당 문제에서 모든 도로의 거리는 1이므로 가중치가 없는 인접 리스트로 그래프를 표현할 수 있다.
인접 리스트(adjacency list)는 파이썬의 리스트를 이용해 그래프를 표현한다.
도시의 개수가 최대 300,000개, 도로의 최대 크기가 1,000,000개이므로 BFS 탐색을 활용해 문제를 시간 복잡도 안에서 해결할 수 있다.
주어지는 도로의 정보를 입력받아 인접 리스트로 도시와 도로 데이터의 그래프를 구현한다.
BFS 탐색 알고리즘을 통해 탐색을 수행하며 각 도시로 가는 최단 거리를 저장한다.
탐색 종료 후 시작 도시에서 각 도시로 갈 수 있는 최단 거리가 거리 정보 K와 같은 도시의 번호를 오름차순으로 출력한다.
슈도코드
- N(노드 개수), M(에지 개수), K(목표 거리), X(시작점) 입력받기
- graph(그래프 데이터 저장 인접 리스트)
- for M만큼 반복: A(시작점), B(도착점) 입력받아 graph 인접 리스트에 그래프 데이터 저장
- distance(방문 최단 거리 저장 리스트) -1로 초기화
- BFS 구현 BFS(v):
- queue(큐 자료구조 생성)
- queue에 시작 노드 삽입
- distance 리스트에 현재 노드 방문 기록 (거리 저장 형태이므로 1 증가)
- while (queue가 비어 있을 때까지):
- 큐에서 현재 노드 데이터 가져오기
- for 현재 노드의 연결 노드 방문:
- if 현재 노드의 연결 노드 중 방문하지 않은 노드):
- 현재 노드의 distance 리스트 값 1 증가시켜 연결 노드의 distance 리스트 값에 저장
- 큐에 연결 노드 삽입
- if 현재 노드의 연결 노드 중 방문하지 않은 노드):
- BFS(X) 실행
- if (distance 리스트 값 중 K가 있으면):
- for 1 ~ N까지 반복: distance 리스트 값인 방문 거리가 K인 노드의 숫자를 출력
- else: -1 출력
반응형
3. 소스코드
import sys
from collections import deque
N, M, K, X = map(int, sys.stdin.readline().split())
graph = [[] for _ in range(N + 1)]
for _ in range(M):
A, B = map(int, sys.stdin.readline().split())
graph[A].append(B)
distance = [-1] * (N + 1)
def BFS(v):
queue = deque()
queue.append(v)
distance[v] += 1
while (queue):
now = queue.popleft()
for i in graph[now]:
if (distance[i] == -1):
distance[i] = distance[now] + 1
queue.append(i)
BFS(X)
if (K in distance):
for i in range(1, N + 1):
if (distance[i] == K):
print(i)
else:
print(-1)
728x90
반응형
'알고리즘 코딩테스트' 카테고리의 다른 글
[백준] 1717번 : 집합의 표현 - 파이썬(Python) - 우당탕탕 개발자 되기 프로젝트 (0) | 2024.02.13 |
---|---|
[백준] 2251번 : 물통 - 파이썬(Python) - 우당탕탕 개발자 되기 프로젝트 (0) | 2024.02.08 |
[백준] 1707번 : 이분 그래프 - 파이썬(Python) - 우당탕탕 개발자 되기 프로젝트 (0) | 2024.02.06 |
[백준] 1325번 : 효율적인 해킹 - 파이썬(Python) - 우당탕탕 개발자 되기 프로젝트 (0) | 2024.02.05 |
[백준] 1033번 : 칵테일 - 파이썬(Python) - 우당탕탕 개발자 되기 프로젝트 (0) | 2024.02.01 |
[백준] 1850번 : 최대공약수 - 파이썬(Python) - 우당탕탕 개발자 되기 프로젝트 (0) | 2024.01.31 |
[백준] 11689번 : GCD(n, k) = 1 - 파이썬(Python) - 우당탕탕 개발자 되기 프로젝트 (0) | 2024.01.30 |
[백준] 1016번 : 제곱 ㄴㄴ 수 - 파이썬(Python) - 우당탕탕 개발자 되기 프로젝트 (0) | 2024.01.29 |