BOJ - 1325

주의·2024년 2월 6일
0

boj

목록 보기
189/214

백준 문제 링크
효율적인 해킹

❓접근법

  1. BFS를 사용했다.
  2. 이 문제에서는 B를 해킹하면 A도 해킹할 수 있으므로
    A와 B가 주어질 때 graph[B].append(A)를 해줘야한다.
  3. 얼마나 해킹을 많이할 수 있는지 알아볼
    리스트 count를 만들어준다.
  4. 1 ~ n + 1 까지 bfs를 실행하는데,
    초기값 cnt = 1로 설정하여 자식 노드에 방문한 적이 없다면
    방문 처리하고, 큐에 넣고, cnt += 1 해준다.
    마지막으로는 count에 cnt를 차례로 넣어준다.
  5. 이제 가장 많이 해킹할 수 있는 컴퓨터의 개수는
    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 = ' ')

너무 시간초과가 나서 힘들었다... 제목이랑 다르게 전혀 효율적이지 않다..

0개의 댓글