ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • BOJ 2606 바이러스 python
    코딩테스트 2024. 4. 16. 14:08

    이 문제는 dfs 혹은 bfs로 그래프를 순회하면서 1번과 연결돼있는 노드의 수를 카운트 하는 기본적인 그래프 탐색 문제이다.

    우선 인접 리스트로 그래프를 만들고, bfs를 이용해서 연결된 노드들을 찾아냈다. dfs를 사용하면 구현은 더 간단하겠지만 시스템 상의 스택이 허용하는 범위에서의 탐색만 가능하다는 한계가 명확하기에, bfs로 구현하려고 했다.

    그래프를 만들 때, 인접 노드를 오름차순으로 탐색하므로 정렬을 해주었다.

    1. 큐의 모든 원소가 사라질 때 까지 맨 앞 노드를 pop한다.

    2. 그 노드의 미방문 인접 노드들을 방문 처리한다.

    3. 방문 처리한 노드들에 대해 원하는 동작을 구현한다 -> 여기서는 cnt를 1 증가시킨다.

    4. 방문 처리한 노드들을 다시 큐에 집어넣는다.

    이 동작이 끝나고 나면 하나의 그래프에서 bfs가 완료된다.

     

    문제의 의도가 명확한, 그래프 탐색 연습용으로 정말 좋은 문제였다.


    코드

    from collections import deque
    
    com = int(input())
    edge = int(input())
    
    graph = [[] for _ in range(com+1)]
    visited = [False] * (com+1)
    
    for _ in range(edge):
        s, e = map(int, input().split())
        graph[s].append(e)
        graph[e].append(s)
        graph[s].sort()
        graph[e].sort()
    
    q = deque([1])
    cnt = 0
    
    while q:
        v = q.popleft()
        visited[v] = True
        for child in graph[v]:
            if not visited[child]:
                visited[child] = True
                q.append(child)
                cnt += 1
    
    print(cnt)

    '코딩테스트' 카테고리의 다른 글

    BOJ 1931 회의실 배정 python  (0) 2024.04.17
    BOJ 1012 유기농 배추 python  (0) 2024.04.16
    BOJ 1260 BFS와 DFS python  (0) 2024.04.16
    BOJ 1149 RGB 거리 python  (0) 2024.04.16
    BOJ 11726 2×n 타일링 python  (0) 2024.04.16
Designed by Tistory.