오랜만에 BFS를 인접리스트를 활용해서 푸려니... 기억이 가물가물했다.ㅠ
회장후보를 구하려면 각사람마다 점수를 구하고, 각 사람의 점수들 중 가장 낮은 점수를 가진 사람들을 구해야 한다.
그래서 간선의 시작점(사람)을 바꿔가면 각 시작점(사람)의 점수를 계산했고, 점수가 같을 경우에는 후보군에 추가시켰다.
visited 배열을 사용해서 방문체크와 점수 계산을 같이 했다.
from collections import deque
N = int(input())
graph = [[] for _ in range(N+1)]
min_score = 51
candidate = []
while True:
person1, person2 = map(int, input().split())
if person1 == -1:
break
graph[person1].append(person2)
graph[person2].append(person1)
def BFS(s, graph):
global min_score, candidate
visited = [0] * (N+1)
Q = deque()
Q.append(s)
visited[s] = 1
while Q:
v = Q.popleft()
for node in graph[v]:
if visited[node] == 0:
visited[node] = visited[v] + 1
Q.append(node)
if len(Q) == 0:
score = visited[v] - 1
if min_score > score:
min_score = score
candidate = [s]
elif min_score == score:
candidate.append(s)
# 각 사람마다 점수 체크하기
for start in range(1, N+1):
BFS(start, graph)
print(min_score, len(candidate))
print(*candidate)
'알고리즘 문제 풀기 > 백준(Baekjoon)' 카테고리의 다른 글
[백준 알고리즘] 2206. 벽부수고 이동하기 (0) | 2021.04.04 |
---|---|
[백준 알고리즘] 5427.불 (0) | 2021.04.04 |
[백준 알고리즘] 2636.치즈 (0) | 2021.04.02 |
[백준 알고리즘] 13706. 제곱근 (0) | 2021.03.30 |
[백준 알고리즘] 7559. A -> B (0) | 2021.03.30 |