2606번: 바이러스
첫째 줄에는 컴퓨터의 수가 주어진다. 컴퓨터의 수는 100 이하인 양의 정수이고 각 컴퓨터에는 1번 부터 차례대로 번호가 매겨진다. 둘째 줄에는 네트워크 상에서 직접 연결되어 있는 컴퓨터 쌍
www.acmicpc.net
바이러스 문제는 DFS와 BFS를 활용해서 풀 수 있는 간단한 문제입니다. 알고리즘2 수강하면서 풀다보니 CC(Connected Component)배우면서 유형이 비슷하다고 생각했습니다.
# 바이러스
# https://www.acmicpc.net/problem/2606
import sys
from collections import deque
input = sys.stdin.readline
def bfs(graph, visited, node):
queue = deque()
queue.append(node)
visited[node] = True
while queue:
start = queue.popleft()
for connectedNode in graph[start]:
if not visited[connectedNode]:
queue.append(connectedNode)
visited[connectedNode] = True
return visited
def dfs(graph, visited, node):
visited[node] = True
for connectedNode in graph[node]:
if not visited[connectedNode]:
dfs(graph, visited, connectedNode)
return visited
v, e = int(input()), int(input())
connectedList = [[] for _ in range(v+1)]
visited = [False] * (v+1)
for i in range(e):
x,y = map(int, input().split())
connectedList[x].append(y)
connectedList[y].append(x)
print(bfs(connectedList, visited, 1).count(True)-1)
위와 같이 풀이를 했습니다. DFS와 BFS에 대해서 오랜만에 하다보니 다시 공부해야 할것 같아서 두가지 방법을 모두 구현했습니다.
인접 리스트를 활용해서 DFS와 BFS를 했고, 반환 값을 visited로 반환하여 True를 count하여 계산했습니다.
'PS > 백준' 카테고리의 다른 글
골드5 뱀과 사다리 게임(16928) (1) | 2023.12.28 |
---|---|
골드5 토마토(7569) (0) | 2023.12.27 |
골드5 토마토(7576) (1) | 2023.12.26 |
실버1 나이트의 이동(7562) (1) | 2023.12.22 |
실버2 유기농 배추(1012) (1) | 2023.12.21 |
2606번: 바이러스
첫째 줄에는 컴퓨터의 수가 주어진다. 컴퓨터의 수는 100 이하인 양의 정수이고 각 컴퓨터에는 1번 부터 차례대로 번호가 매겨진다. 둘째 줄에는 네트워크 상에서 직접 연결되어 있는 컴퓨터 쌍
www.acmicpc.net
바이러스 문제는 DFS와 BFS를 활용해서 풀 수 있는 간단한 문제입니다. 알고리즘2 수강하면서 풀다보니 CC(Connected Component)배우면서 유형이 비슷하다고 생각했습니다.
# 바이러스
# https://www.acmicpc.net/problem/2606
import sys
from collections import deque
input = sys.stdin.readline
def bfs(graph, visited, node):
queue = deque()
queue.append(node)
visited[node] = True
while queue:
start = queue.popleft()
for connectedNode in graph[start]:
if not visited[connectedNode]:
queue.append(connectedNode)
visited[connectedNode] = True
return visited
def dfs(graph, visited, node):
visited[node] = True
for connectedNode in graph[node]:
if not visited[connectedNode]:
dfs(graph, visited, connectedNode)
return visited
v, e = int(input()), int(input())
connectedList = [[] for _ in range(v+1)]
visited = [False] * (v+1)
for i in range(e):
x,y = map(int, input().split())
connectedList[x].append(y)
connectedList[y].append(x)
print(bfs(connectedList, visited, 1).count(True)-1)
위와 같이 풀이를 했습니다. DFS와 BFS에 대해서 오랜만에 하다보니 다시 공부해야 할것 같아서 두가지 방법을 모두 구현했습니다.
인접 리스트를 활용해서 DFS와 BFS를 했고, 반환 값을 visited로 반환하여 True를 count하여 계산했습니다.
'PS > 백준' 카테고리의 다른 글
골드5 뱀과 사다리 게임(16928) (1) | 2023.12.28 |
---|---|
골드5 토마토(7569) (0) | 2023.12.27 |
골드5 토마토(7576) (1) | 2023.12.26 |
실버1 나이트의 이동(7562) (1) | 2023.12.22 |
실버2 유기농 배추(1012) (1) | 2023.12.21 |