백준 2606 파이썬 (바이러스)

철웅·2023년 2월 21일
0

BOJ

목록 보기
36/46

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


💻 Code (DFS)

N = int(input())
link = int(input())
graph = [[] for _ in range(N+1)]

for _ in range(link):
    a, b = map(int, input().split()) 
    # 연결된 컴퓨터의 정보를 저장해준다.
    graph[a].append(b)
    graph[b].append(a)

visited = [False] * (N+1)

def dfs(v, cnt):
    visited[v] = True
    for i in graph[v]:
        if not visited[i]:
            cnt = dfs(i, cnt+1)
    return cnt        
    
print(dfs(1,0))
# print(graph)
# print(visited)
  • graph
  • i의 흐름 : 2 - 1 - 3 - 2 - 5 - 1 - 2 - 6 - 5 - 5


💻 Code (BFS)

from collections import deque
N = int(input())
link = int(input())
graph = [[] for _ in range(N+1)]
visited = [False] * (N+1)

for _ in range(link):
    a, b = map(int, input().split())
    graph[a].append(b)
    graph[b].append(a)

def bfs(start):
    queue = deque([start])
    visited[start] = True
    while queue:
        v = queue.popleft()
        for i in graph[v]:
            if not visited[i]:
                queue.append(i)
                visited[i] = True

bfs(1)                
print(visited.count(True)-1)    
  • cnt 변수를 사용 안 하고 마지막에 visited에서 True인 값 출력 (하나 뺀 이유는 1번 컴퓨터를 제외 하기 위해)
  • 시간은 dfs가 더 빠르다
  • dfs는 스택과 재귀, bfs는 큐와 while 기억하자

0개의 댓글