본문 바로가기
Algorithm

[탐색/BFS] 백준 1325 효율적인 해킹 - 파이썬(Python)

by jangThang 2023. 6. 30.
반응형

백준 온라인 저지

 

[ Contents ]

     

     

    1. 문제 (링크 참조)

     

    1325번: 효율적인 해킹

    첫째 줄에, N과 M이 들어온다. N은 10,000보다 작거나 같은 자연수, M은 100,000보다 작거나 같은 자연수이다. 둘째 줄부터 M개의 줄에 신뢰하는 관계가 A B와 같은 형식으로 들어오며, "A가 B를 신뢰한

    www.acmicpc.net

     

     

    2. 문제 풀이

     N개의 컴퓨터가 신뢰하는 관계를 M개의 줄로 A B와 같이 입력받습니다.

     A B는 A가 B를 신뢰한다는 뜻으로, B가 해킹되면 A도 해킹됨을 뜻합니다.

     

    2022.02.23 - [Algorithm] - [Algorithm] 너비 우선 탐색(BFS), 가까운 주변부터 찾자

     

    [Algorithm] 너비 우선 탐색(BFS), 가까운 주변부터 찾자

    BFS는 가까운 주변부터 탐색하는 알고리즘입니다. 큐를 이용한 BFS 구현방법과 코드를 알아보겠습니다. [ Contents ] 1. BFS(Breath First Search) 너비 우선 탐색(BFS): 가까운 주변 노드부터 탐색하며 점점

    star7sss.tistory.com

     보통 그래프 문제에서 A B 입력은 A -> B 를 뜻하지만, 이 문제는 반대입니다. 이를 주의해서 BFS 알고리즘을 사용합니다.

     

     

     

    3. 코드

    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)
    
    # bfs
    ans = []
    for i in range(1, N+1):
        visited = [False]*(N+1)
        queue = deque([i])
        visited[i] = True
        
        cnt = 1
        while queue:
            x = queue.popleft()
            for j in graph[x]:
                if not visited[j]:
                    visited[j] = True
                    queue.append(j)
                    cnt += 1
        ans.append(cnt)
    
    max_cnt = max(ans)
    for i in range(N):
        if ans[i] == max_cnt:
            print(i+1, end=" ")

     

     

    star가 되고나서 Tistory

    반응형

    댓글