반응형
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 |
Tags
- 현대엔지니어링
- 사회조사분석사2급실기신청꿀팁
- 백준
- 너비우선탐색
- 사회조사분석사 2급 기출문제집
- 백준 알고리즘
- 파이썬 정렬
- 공모주
- 벽부수고이동하기 파이썬
- 공모주청약
- 사회조사분석사 2급
- 머신러닝
- 사회조사분석사 2급 공부방법
- 사회조사분석사 2급 필기 요약정리
- 시물레이션
- BFS
- 2월공모주
- 알고리즘
- 사회조사분석사2급실기신청
- 사이킷런
- 그리디
- 사회조사분석사 2급 필기 공부방법
- 오미크론 자가격리
- DFS
- 사회조사분석사 2급 필기 시험시간
- 현대엔지니어링 수요예측
- 사회조사분석사 2급 접수
- 정렬
- 공모주 청약
- 사회조사분석사 2급 독학
Archives
- Today
- Total
세상을 바꾸는 데이터
[백준 18352번] 특정 거리의 도시 찾기 - 파이썬 본문
문제 링크:
https://www.acmicpc.net/problem/18352
풀이 유형:
그래프 이론, 브루트포스 알고리즘, 그래프 탐색, 너비 우선 탐색
풀이 과정:
이 문제의 핵심 포인트는 모든 도로의 거리가 1이라는 점이다.
모든 간선의 비용이 동일할 때는 너비 우선 탐색(BFS)을 이용하여 최단 거리를 찾을 수 있다.
먼저 특정한 도시 X를 시작점으로 BFS를 수행하여 모든 도시까지의 최단 거리를 계산한 후에, 각 최단거리를 하나씩 확인하며 그 값이 K인 경우에 해당 도시의 번호를 오름차순으로 출력하면 된다.
풀이 코드:
# 18352번 특정 거리의 도시 찾기
from collections import deque
# 도시의 개수, 도로의 개수, 거리 정보, 출발 도시 번호
n, m, k, x = map(int, input().split())
graph = [[] for _ in range(n+1)]
# 모든 도로 정보 입력받기
for _ in range(m):
a, b = map(int, input().split())
graph[a].append(b)
# 모든 도시애 대한 최단 거리 초기화
distance = [-1] * (n+1)
distance[x] = 0 # 출발 도시까지의 거리는 0으로 설정
# 너비 우선 탐색(BFS) 수행
q = deque([x])
while q:
now = q.popleft()
# 현재 도시에서 이동할 수 있는 모든 도시를 확인
for next_node in graph[now]:
# 아직 방문하지 않는 도시라면
if distance[next_node] == -1:
# 최단 거리 갱신
distance[next_node] = distance[now] + 1
q.append(next_node)
# 최단 거리가 K인 모든 도시의 번호를 오름차순으로 출력
check = False
for i in range(1, n+1):
if distance[i] == k:
print(i)
check = True
# 만약 최단 거리가 K인 도시가 없다면, -1 출력
if check == False:
print(-1)
728x90
반응형
'PS Study > BOJ(백준)' 카테고리의 다른 글
[백준 18405번] 경쟁적 전염 - 파이썬 (28) | 2022.02.15 |
---|---|
[백준 14502번] 연구소 - 파이썬 (36) | 2022.02.14 |
[백준 3190번] 뱀 - 파이썬 (37) | 2022.02.12 |
[백준 14500번] 테트로미노 - 파이썬 (62) | 2022.02.11 |
[백준 15686번] 치킨 배달 - 파이썬 (74) | 2022.02.09 |
Comments