본문 바로가기
Problem Solving/백준

[백준|파이썬] 2606: 바이러스 (실버3)

by 청량리 물냉면 2023. 4. 5.
반응형
문제

https://www.acmicpc.net/problem/2606

 

2606번: 바이러스

첫째 줄에는 컴퓨터의 수가 주어진다. 컴퓨터의 수는 100 이하이고 각 컴퓨터에는 1번 부터 차례대로 번호가 매겨진다. 둘째 줄에는 네트워크 상에서 직접 연결되어 있는 컴퓨터 쌍의 수가 주어

www.acmicpc.net

 

 

🐍파이썬
import sys
com = int(sys.stdin.readline())
ssang = int(sys.stdin.readline())
graph = [[] for _ in range(com + 1)]
visited = [False] * (com + 1)
global answer	#dfs함수 내에서도 사용할 수 있도록 전역변수 선언
answer = 0

for _ in range(ssang):
    a, b = map(int, sys.stdin.readline().split())
    graph[a].append(b)
    graph[b].append(a)

def dfs(v):	#dfs를 통해 더 깊이 들어갈 수 없을 때까지 탐색
    global answer
    visited[v] = True
    answer += 1	#노드 하나 탐색 시마다 answer+1
    for i in graph[v]:
        if not visited[i]:
            dfs(i)
      
dfs(1)
print(answer - 1)	#1번 컴퓨터는 제외하고 카운팅

 

 

다른 풀이 방법

from sys import stdin

n = int(stdin.readline())
v = int(stdin.readline())

graph = [ [] for _ in range(n+1) ]
visited = [0] * (n+1)	#방문한 노드의 갯수를 카운팅하기 위한 리스트

for i in range(v) : 
    a, b = map(int, stdin.readline().split())
    graph[a] += [b]
    graph[b] += [a]

def dfs(k) : 
    visited[k] = 1	#방문 시 visited에 1을 대입
    for nx in graph[k] : 
        if visited[nx] == 0 : 
            dfs(nx)

dfs(1)
print(sum(visited)-1)	#visited의 1갯수를 통해 방문한 노드의 갯수를 센다.

 

 

 

반응형