Algorithm/Problems_Solving
백준(BaekJoon) 2606 - 바이러스
yunajoe
2022. 11. 27. 12:04
# DFS로 문제풀기
computer = int(input())
line = int(input())
# 1번 컴퓨터를 통해 웜 바이러스에 걸리게 되는 컴퓨터의 수
# [[], [], []]
graph = [[] for _ in range(computer+1)]
visited = [False] * (computer + 1)
# [[], [2,5], [1,3,5], [2], [7], [1,2,6], [5], [4]]
for i in range(computer):
if i !=0:
node, num = map(int, input().split())
graph[node].append(num)
graph[num].append(node)
def dfs(graph, node, visited):
visited[node] = True
for i in graph[node]:
if not visited[i]:
dfs(graph, i, visited)
return sum(visited)-1
print(dfs(graph, 1, visited)) # 실패
computer = int(input())
line = int(input())
# 1번 컴퓨터를 통해 웜 바이러스에 걸리게 되는 컴퓨터의 수
# [[], [], []]
graph = [[] for _ in range(computer+1)]
visited = [False] * (computer + 1)
# [[], [2,5], [1,3,5], [2], [7], [1,2,6], [5], [4]]
for i in range(line):
node, num = map(int, input().split())
graph[node] += [num]
graph[num] += [node]
def dfs(graph, node, visited):
visited[node] = True
for i in graph[node]:
if not visited[i]:
dfs(graph, i, visited)
return sum(visited)-1
print(dfs(graph, 1, visited)) # 성공
# 위에것은 왜 실패했을까?!?!
# 다른점
for i in range(computer):
if i !=0:
node, num = map(int, input().split())
graph[node].append(num)
graph[num].append(node)
for i in range(line):
node, num = map(int, input().split())
graph[node] += [num]
graph[num] += [node]
문제는 range로 입력하는 값이 문제였다!
- 네트워크 상에서 직접 연결되어 있는 컴퓨터 쌍의 수 만큼 돌려줘야 한다
computer = int(input())
line = int(input())
# 1번 컴퓨터를 통해 웜 바이러스에 걸리게 되는 컴퓨터의 수
# [[], [], []]
graph = [[] for _ in range(computer+1)]
visited = [False] * (computer + 1)
# [[], [2,5], [1,3,5], [2], [7], [1,2,6], [5], [4]]
for i in range(line):
node, num = map(int, input().split())
graph[node].append(num)
graph[num].append(node)
def dfs(graph, node, visited):
visited[node] = True
for i in graph[node]:
if not visited[i]:
dfs(graph, i, visited)
return sum(visited)-1
print(dfs(graph, 1, visited)) # 성공
# BFS로 문제풀기
from collections import deque
computer = int(input())
line = int(input())
graph = [[] for _ in range(computer+1)]
visited = [False] * (computer+1)
for i in range(line):
node, num = map(int, input().split())
graph[node] += [num]
graph[num] += [node]
def bfs(graph, node, visited):
queue = deque([node]) # node를 큐에 넣고
visited[node] = True # 큐에 넣어진 노드는 True(방문) 처리
# 큐가 완전히 빌 때까지 반복
while queue:
v = queue.popleft()
for i in graph[v]:
if not visited[i]: # false 이면은, 방문처리가 안 되어 있으면
queue.append(i) # 큐에 넣고
visited[i] = True # 방문 처리
return sum(visited)-1
print(bfs(graph, 1, visited))