문제풀이/백준(Boj) 문제풀이

[백준][그래프] - 2606. 바이러스

얄루몬 2022. 4. 29. 18:28

[다시 푸는 문제]

[DFS]

def DFS(start):
    global answer
    visited[start] = 1
    for i in network[start]:
        if visited[i] == 0:
            DFS(i)
            answer += 1

if __name__ == "__main__":
    computer = int(input())
    pair_Computer = int(input())

    network = [[] for _ in range(computer+1)]
    visited = [0] * (computer + 1)
    answer = 0

    for i in range(pair_Computer):
        a,b = map(int,input().split())
        network[a].append(b)
        network[b].append(a)

    DFS(1)
    print(answer)

 

[BFS]

import collections

def BFS(start):
    global answer
    q = collections.deque([1])
    while q:
        x = q.popleft()
        visited[x] = 1

        for i in network[x]:
            if visited[i] == 0:
                q.append(i)
                visited[i] = 1
                answer += 1

if __name__ == "__main__":
    computer = int(input())
    pair_Computer = int(input())

    network = [[] for _ in range(computer+1)]
    visited = [0] * (computer + 1)
    answer = 0

    for i in range(pair_Computer):
        a,b = map(int,input().split())
        network[a].append(b)
        network[b].append(a)

    BFS(1)
    print(answer)

 

[메모]

  • 전역 변수를 사용해서 방문 노드를 방문처리 후 answer + 1 해준 뒤 마지막에 print해준다.
  • DFS는 재귀이기 때문에 따로 반복문 내에서 방문처리하지 않아도 된다.
  • BFS는 재귀가 아니기 때문에 방문처리를 신경써서 해주어야 한다.