티스토리 뷰

- 문제 링크

https://www.acmicpc.net/problem/11724

- 풀이

dfs로 풀었다. 방향이 없는 그래프라고 해서 단방향 그래프로 구현했다가 한 번 틀리고 아 ! 내가 바보같은 생각을 했구나를 깨닫고 양방향 그래프로 다시 바꿔서 구현했다. 노드 번호를 1번씩 차례대로 for문을 돌면서 연결된 요소가 몇개 있나를 찾으면 된다. 어렵지 않은 실버 2 문제였다.

-  코드

import sys
input = sys.stdin.readline
sys.setrecursionlimit(10**8)

def dfs(start):
    visited[start] = 1

    for edge in graph[start]:
        if visited[edge] == 0:
            dfs(edge)


N, M = map(int, input().split())
visited = [0] * (N+1)
graph = [[] * (N+1) for _ in range(N+1)]
for i in range(M):
    a, b = map(int, input().split())
    graph[a].append(b)
    graph[b].append(a)


res = 0
for i in range(1, N + 1):
    if visited[i] == 0:
        dfs(i)
        res += 1

print(res)

 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/12   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
글 보관함