Study/SWEA

5248. [파이썬 S/W 문제해결 구현] 6일차 - 그룹 나누기

줴림 2025. 4. 28. 16:38

이번엔 전체 몇 개의 조가 만들어지는지를 알아보는 문제였다. 딱 문제를 봤을 때 "아 이건 그래프랑 DFS를 쓰는 문제야!!"까지는 반사적으로 생각할 수 있었지만, 그래프를 어떻게 구현해야 하는지... 그 부분에서 막혀버렸다. 무방향 그래프니까 graph[a].append(b)와 graph[b].append(a)를 둘 다 해줘야 하는 건 알겠는데, 더 진행할 수 없어서 인터넷의 도움을 받아서 진행했다..

T = int(input())
for test_case in range(1, T+1):
    N, M = map(int, input().split())
    arr = list(map(int, input().split()))
    
    graph = [[] for _ in range(N+1)]    # [0]은 사용x
    visited = [False for _ in range(N+1)]
    
    for i in range(0, len(arr), 2):
        a = arr[i]
        b = arr[i+1]
        graph[a].append(b)
        graph[b].append(a)
    
    count = 0
    
    def dfs(node):
        visited[node] = True
        for neighbor in graph[node]:
            if not visited[neighbor]:
                dfs(neighbor)
    
    for i in range(1, N+1):
        if not visited[i]:
            dfs(i)
            count += 1
            
    print(f"#{test_case} {count}")

그래프를 구현하는 방법도, 그래프 내부를 DFS로 탐색하는 것도 익숙해지도록 많이 연습해야 할 것 같다. 코드만 보면 엄청 쉽다고 생각은 하는데 막상 구현을 못하니...