STUDY/Algorithm

[백준] 2606 바이러스

sinawi95 2021. 2. 24. 21:07
728x90

https://acmicpc.net/problem/2606 

 

2606번: 바이러스

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

www.acmicpc.net

node = int(input())
vertex = int(input())
graph = [list() for _ in range(node + 1)]
for _ in range(vertex):
    u, v = map(int, input().split())
    graph[u].append(v)
    graph[v].append(u)

visited = [0] * (node + 1)
stack = [1]   # 1번 컴퓨터 부터 시작
while stack:  # stack 이 비어있는 경우에 끝남
    visit_node = stack[-1]
    visited[visit_node] = 1
    for adjacent in graph[visit_node]:
        if not visited[adjacent]:
            stack.append(adjacent)
            break
    else:
        stack.pop()
print(sum(visited)-1)

처음 혼자 풀어본 DFS 문제이다.

딱 처음 배운 그대로의 알고리즘을 사용해서 연결되어있는 점들을 구했다.

1번 컴퓨터부터 시작한다고 되어있어서 stack에 1을 넣고 시작하였고 방문하지 않은 인접 노드들을 스택에 넣고 순회해가면서 구하였다.

짜면서 조금 버벅였는데 몇번 하다보면 괜찮아 지겠지

 

이 문제는 근데 dfs나 bfs나 큰 차이가 없는것같다.

'STUDY > Algorithm' 카테고리의 다른 글

[백준] 10026 적록색약  (0) 2021.03.01
[백준] 2667 단지 번호 붙이기  (0) 2021.02.24
[백준] 1713 후보추천하기  (0) 2021.02.23
[백준] 8979 올림픽  (0) 2021.02.23
[백준] 2804 크로스워드 만들기  (0) 2021.02.23