본문 바로가기

Python 코딩테스트

DFS/BFS: 백준 2606 파이썬

반응형

문제:

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

 

2606번: 바이러스

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

www.acmicpc.net

풀이:

DFS

com = int(input())
vertex = int(input())

array = [[] for _ in range(com+1)]
result = 0
visited = [False]*(com+1)

for _ in range(vertex):
    x, y = map(int, input().split())
    array[x].append(y)
    array[y].append(x)


def dfs(i):
    global result
    result += 1
    # 현재 노드를 방문처리
    visited[i] = True
    # 현재 노드와 연결된 다른 노드를 재귀적으로 방문
    for j in array[i]:
        if not visited[j]:
            dfs(j)


# 정의된 DFS 함수 호출
dfs(1)
print(result-1)

 

BFS

from collections import deque

com = int(input())
vertex = int(input())

array = [[] for _ in range(com+1)]
result = 0
visited = [False] * (com+1)

for i in range(vertex):
    x, y = map(int, input().split())
    array[x].append(y)
    array[y].append(x)


def bfs(i):
    global result
    queue = deque([i])
    visited[i] = True
    while queue:
        v = queue.popleft()
        for i in array[v]:
            if not visited[i]:
                queue.append(i)
                visited[i] = True
                result += 1


bfs(1)
print(result)

 

반성:

아쉽게도 이 문제도 이틀 정도의 시간 동안 해결하지 못해 구글링을 했다. 구글링을 통해 얻는 정보는 입력받은 숫자 

쌍을 노드가 연결된 정보를 나타내는 리스트로 바꾸어주는 방법이다. 이렇게 바꾸어 주면 DFS와 BFS를 사용하기에 아주 쉬웠다. 이번에 알게 된 방법을 잘 숙지해서 다른 문제 해결에 사용하도록 해야겠다.

반응형

'Python 코딩테스트' 카테고리의 다른 글

정렬: 백준 11004 파이썬  (0) 2021.08.23
DFS/BFS: 백준 1260 파이썬  (0) 2021.08.18
DFS/BFS: 백준 16173 파이썬  (0) 2021.08.12
구현: 백준 1236 파이썬(Python)  (0) 2021.08.06
구현: 백준 2851 파이썬(Python)  (0) 2021.08.03