[Python, 백준/2606번] 바이러스

2024. 9. 24. 17:57·코테/백준


☑️ [Python, 백준/2606번] 바이러스

1️⃣ 문제

신종 바이러스인 웜 바이러스는 네트워크를 통해 전파된다. 한 컴퓨터가 웜 바이러스에 걸리면 그 컴퓨터와 네트워크 상에서 연결되어 있는 모든 컴퓨터는 웜 바이러스에 걸리게 된다.
예를 들어 7대의 컴퓨터가 <그림 1>과 같이 네트워크 상에서 연결되어 있다고 하자. 1번 컴퓨터가 웜 바이러스에 걸리면 웜 바이러스는 2번과 5번 컴퓨터를 거쳐 3번과 6번 컴퓨터까지 전파되어 2, 3, 5, 6 네 대의 컴퓨터는 웜 바이러스에 걸리게 된다. 하지만 4번과 7번 컴퓨터는 1번 컴퓨터와 네트워크상에서 연결되어 있지 않기 때문에 영향을 받지 않는다.

어느 날 1번 컴퓨터가 웜 바이러스에 걸렸다. 컴퓨터의 수와 네트워크 상에서 서로 연결되어 있는 정보가 주어질 때, 1번 컴퓨터를 통해 웜 바이러스에 걸리게 되는 컴퓨터의 수를 출력하는 프로그램을 작성하시오.

 

2️⃣ 접근

정석적인 그래프 탐색 문제다. DFS와 BFS 둘 중 아무거나 풀어도 풀 수 있는 문제지만 BFS로 해결했다. DFS와 BFS 개념을 배울 때 'Introduction to Algorithms' 책으로 배웠었는데 DFS는 모든 노드에서 순회한다. BFS는 한 시작 노드가 존재한다는 개념이 있었다. 

 

해당 문제도 단순히 1번 컴퓨터부터 탐색하면 되기 때문에 BFS를 선택했었는데 DFS나 BFS나 상관없을 것 같다. 알고리즘이라는 게 강력한 틀이 있는 게 아니라 핵심 Core만 지키면 되는 것 같아서.. BFS에다가 모든 노드를 순회하는데 Queue를 쓰면 그게 BFS지 달리 무엇이 있을까.

 

어쨌든 BFS가 탐색에 성공하면 수를 증가시키는 방향으로 문제를 해결할 수 있었다.

 

3️⃣ 코드

from collections import deque

computer_count = int(input())
connect_count = int(input())

graph = [[0]*(computer_count+1) for _ in range(computer_count+1)]
for i in range (connect_count):
    a,b = map(int,input().split())
    graph[a][b] = graph[b][a] = 1
visit = [False] * (computer_count + 1)

sum = 0
def bfs(node) -> int:
    global sum
    q = deque([node])
    visit[node] = True
    
    while len(q) > 0:
        s = q.popleft()
        for i in range(1, computer_count + 1):
            if graph[s][i] == 1 and not visit[i]:
                visit[i] = True
                sum = sum + 1
                q.append(i)
                
        visit[s] = True
    return sum

print(bfs(1))

'코테 > 백준' 카테고리의 다른 글

[Python, 백준/21606번] 아침 산책  (0) 2024.10.07
[Python, 백준/11725번] 트리의 부모 찾기  (1) 2024.09.24
[Python, 백준/11724번] 연결 요소의 개수  (0) 2024.09.24
[Python, 백준/1260번] DFS와 BFS  (0) 2024.09.21
[Python, 백준/1991번] 트리 순회  (2) 2024.09.19
'코테/백준' 카테고리의 다른 글
  • [Python, 백준/21606번] 아침 산책
  • [Python, 백준/11725번] 트리의 부모 찾기
  • [Python, 백준/11724번] 연결 요소의 개수
  • [Python, 백준/1260번] DFS와 BFS
태역
태역
  • 태역
    RYULAB
    태역
  • 전체
    오늘
    어제
    • 분류 전체보기
      • 언어
        • C
        • C++
        • C#
      • 엔진, 프레임워크
        • Unity
        • Unreal
        • Electron
      • 공부
        • 디자인 패턴
        • 수학
        • CS
        • Git
        • 알고리즘
        • 자료구조
      • 코테
        • 프로그래머스
        • 백준
      • 독서
        • Effective C#
        • CLR via C#
        • 뇌를 자극하는 윈도우즈 시스템 프로그래밍
        • 오브젝트
        • CSAPP
        • OSTEP
      • 프로젝트
        • Unity
      • 개발 일지
        • 퓨처리티
        • 골든타임
      • 활동
        • 게임잼 후기
        • 게임제작동아리 브릿지
        • 크래프톤 정글
        • 기타
      • 기타
  • 블로그 메뉴

    • 링크

    • 공지사항

      • 2024 04 17
    • 인기 글

    • 태그

      오블완
      인프런 #인프런강의후기 #게임개발 #게임개발강의 #인강후기 #강의후기 #게임개발자 #인프런강의
      티스토리챌린지
    • 최근 댓글

    • 최근 글

    • hELLO· Designed By정상우.v4.10.3
    태역
    [Python, 백준/2606번] 바이러스
    상단으로

    티스토리툴바