백준 문제 링크
효율적인 해킹
- BFS를 사용했다.
- 이 문제에서는 B를 해킹하면 A도 해킹할 수 있으므로
A와 B가 주어질 때 graph[B].append(A)를 해줘야한다.- 얼마나 해킹을 많이할 수 있는지 알아볼
리스트 count를 만들어준다.- 1 ~ n + 1 까지 bfs를 실행하는데,
초기값 cnt = 1로 설정하여 자식 노드에 방문한 적이 없다면
방문 처리하고, 큐에 넣고, cnt += 1 해준다.
마지막으로는 count에 cnt를 차례로 넣어준다.- 이제 가장 많이 해킹할 수 있는 컴퓨터의 개수는
max_value = max(count) 로 구할 수 있다.
count의 인덱스를 돌면서, 그 값이 max_value와 같다면
인덱스 + 1을 출력하면 된다. 끝!for i in range(n): if count[i] == max_value: print(i+1, end = ' ')
from collections import deque
import sys
input = sys.stdin.readline
n, m = map(int, input().split())
graph = [[] for _ in range(n + 1)]
for _ in range(m):
a, b = map(int, input().split())
graph[b].append(a)
count = []
for i in range(1, n + 1):
cnt = 1
queue = deque()
queue.append(i)
visited = [False] * (n + 1)
visited[i] = True
while queue:
x = queue.popleft()
for i in graph[x]:
if not visited[i]:
visited[i] = True
queue.append(i)
cnt += 1
count.append(cnt)
max_value = max(count)
for i in range(n):
if count[i] == max_value:
print(i+1, end = ' ')
너무 시간초과가 나서 힘들었다... 제목이랑 다르게 전혀 효율적이지 않다..