본문 바로가기
Python3/백준 알고리즘

2022.02.14 [백준] (python 파이썬) 바이러스

by ian's coding 2022. 2. 14.
728x90
반응형

 

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

 

2606번: 바이러스

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

www.acmicpc.net


풀이

이 문제는 최단거리나 방향성이 있는 문제가 아니기 때문에 bfs와 dfs를 모두 사용할 수 있다.

 

아래의 코드는 bfs를 이용하여 작성한 코드이다.

graph배열을 생성 후, 각 정점에서 연결된 정점들을 저장한다.

그리고 vis배열을 이용하여 각 정점에 방문했는지의 여부를 체크한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
from collections import deque
 
n=int(input())
m=int(input())
graph=[[]*for _ in range(n+1)]
vis=[-1]*(n+1)
 
def bfs(i):
    deq=deque()
    deq.append(i)
    vis[i]=0
    cnt=0
    while deq:
        v=deq.popleft()
        cnt += 1
        for i in graph[v]:
            if vis[i]==-1:
                deq.append(i)
                vis[i]=0
    return cnt-1
 
for _ in range(m):
    a,b=map(int, input().split())
    graph[a].append(b)
    graph[b].append(a)
print(bfs(1))
cs

 

아래의 코드는 dfs로 작성한 코드이다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
from collections import deque
 
n=int(input())
m=int(input())
graph=[[]*for _ in range(n+1)]
vis=[-1]*(n+1)
cnt=0
def dfs(i):
    vis[i]=0
    global cnt
    cnt+=1
    for a in graph[i]:
        if vis[a]==-1:
            dfs(a)
 
for _ in range(m):
    a,b=map(int, input().split())
    graph[a].append(b)
    graph[b].append(a)
dfs(1)
print(cnt-1)
cs

 

 

 

728x90
반응형

댓글