250x250
Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| 8 | 9 | 10 | 11 | 12 | 13 | 14 |
| 15 | 16 | 17 | 18 | 19 | 20 | 21 |
| 22 | 23 | 24 | 25 | 26 | 27 | 28 |
| 29 | 30 | 31 |
Tags
- 스프링 컨테이너
- aws saa-c03
- 다이렉트 레퍼런스
- 딕셔너리
- 백준
- 코딩테스트
- java
- python list method
- BFS
- 컴포넌트 스캔
- stop the world
- getreference
- Spring
- 클래스 로더 계층
- 자바
- 알고리즘
- 2026 AWS SAA-C03
- 어플리케이션 클래스 로더
- 객체지향
- 스프링
- 파이썬 리스트 메서드
- dfs
- 부트스트랩 클래스 로더
- python
- 플랫폼 클래스 로더
- 자료구조
- 심볼릭 레퍼런스
- AWS SAA-C03 합격후기
- 파이썬
- 파이썬 문자열 메서드
Archives
- Today
- Total
클라우드 낚시꾼
[백준] 18352번 특정 거리의 도시 찾기 - BFS(Python3) 본문
728x90


제한 조건과 설계

- 시간 제한이 2초지만 노드가 30만개라서 좀 불안하다.
- 방향 그래프다.
- 시작 노드로부터 모든 각 노드의 거리를 구하는 것이므로 BFS가 좋아보인다.
자연어 알고리즘
- 정보를 입력 받아 그래프를 생성한다.
- 시작 정점으로 BFS 탐색을 시도한다.
- queue에서 front 노드를 dequeue한다.
- dequeue된 노드의 인접한 노드 중에서 아직 방문하지 않은 노드가 있다면
- queue에 인접 노드를 enqueue 한다.
- 시작 노드로부터 인접 노드의 거리 = 시작 노드로부터 이전 노드(dequeue된 노드)의 거리 + 1
- queue가 빌 때까지 위의 과정을 반복한다.
- 선형 탐색으로 nodes_dist에서 요소 값이 k(거리)인 index를 ans리스트에 append 한다.
- 답에 해당하는 노드들을 출력한다. 답에 해당하는 노드가 없다면 -1을 출력한다.
- 종료
파이썬 코드
import sys
from collections import deque
input = sys.stdin.readlineㅅd
# 도시의 개수, 도로의 개수, 거리, 시작 정점
n, m, k, x = map(int, input().split())
graph = [[] for _ in range(n+1)]
visited = [False] * (n+1)
nodes_dist = [0] * (n+1)
for i in range(m):
u,v= map(int, input().split())
graph[u].append(v)
graph[u].sort()
def bfs(graph, s, visited):
queue = deque([s])
visited[s] = True
while queue:
previous_node = queue.popleft()
for node in graph[previous_node]:
if not visited[node]:
queue.append(node)
nodes_dist[node] = nodes_dist[previous_node] + 1
visited[node] = True
bfs(graph,x,visited)
ans = [idx for idx in range(1, n+1) if nodes_dist[idx] == k]
if ans:
print(*ans, sep='\n')
else:
print(-1)
세 줄 요약
- 어떤 한 노드로부터 다른 모든 노드의 거리를 구할 때는 BFS를 선택하자. (어떤 노드와 어떤 노드의 거리면 DFS가 더 좋다.)
- 언패킹 연산자(*)는 iterable 객체의 개별 항목을 추출하여 개별 인자로 전달한다. 여기서 sep은 개별 항목의 구분자이다.
- queue에 들어가는 순간 방문될 예정이므로 방문 처리를 해야 한다.
728x90
'CodingTest > 문제풀이' 카테고리의 다른 글
| [백준] 24445번 알고리즘 수업-너비 우선 탐색 2 (BFS 시간 초과 해결) (2) | 2024.01.03 |
|---|---|
| [백준] 13656 침투 - BFS (Python3) (0) | 2023.12.29 |
| [백준] 2644번 촌수계산 - DFS (Python3) (0) | 2023.12.28 |
| [백준] 13023번 ABCDE - DFS 풀이 + 반례 (Python3) (0) | 2023.12.27 |
| [백준] 11724번 연결 요소의 개수 - DFS(stack, 재귀함수) (Python3) (0) | 2023.12.27 |