문제 링크
https://www.acmicpc.net/problem/6118
6118번: 숨바꼭질
재서기는 수혀니와 교외 농장에서 숨바꼭질을 하고 있다. 농장에는 헛간이 많이 널려있고 재서기는 그 중에 하나에 숨어야 한다. 헛간의 개수는 N(2 <= N <= 20,000)개이며, 1 부터 샌다고 하자. 재
www.acmicpc.net
풀이
- bfs 문제
- 1번 노드로부터 모든 노드까지의 최단 거리 visited에 계산
- visited의 최댓값 구한 후 최댓값의 최소 인덱스 출력, 최댓값 출력, 최댓값 개수 출력
from collections import deque, defaultdict
def bfs(v):
q = deque()
# 노드 번호와 거리 큐에 삽입
q.append((v,0))
# 1번 노드 방문 기록 표시
visited[v] = 1
while q:
x, index = q.popleft()
for u in maps[x]:
# 방문하지 않았다면
if visited[u] == 0:
# 거리 하나 증가
visited[u] = index+1
# 큐에 삽입
q.append((u, index+1))
# 1번 노드로부터 모든 노드까지 최단 거리 구하기
n, m = map(int,input().split())
maps = defaultdict(list)
for _ in range(m):
a,b = map(int,input().split())
maps[a].append(b)
maps[b].append(a)
visited = [0] * (n+1)
bfs(1)
# 가장 멀리 있는 노드까지의 거리
answer = max(visited)
# 가장 멀리 있는 노드 중 가장 작은 노드
for i in range(2,n+1):
if visited[i] == answer:
print(i,end =" ")
break
# 그 헛간까지의 거리
print(answer, end = " ")
# 그 헛간과 같은 거리를 갖는 헛간의 개수
print(visited[2:].count(answer))'개발 > algorithm' 카테고리의 다른 글
| [백준 2206번] 벽 부수고 이동하기 - python (0) | 2022.01.27 |
|---|---|
| [백준 1303번] 전쟁 - 전투 -python (0) | 2022.01.26 |
| [백준 3184번] 양 -python (0) | 2022.01.26 |
| [백준 2660번] 회장 뽑기 -python (0) | 2022.01.26 |
| [백준 1743] 음식물 피하기 -python (0) | 2022.01.25 |