๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Algorithm/๋ฐฑ์ค€(BOJ)

[ ํŒŒ์ด์ฌ(python) ] ๋ฐฑ์ค€ 11724 - ์—ฐ๊ฒฐ ์š”์†Œ์˜ ๊ฐœ์ˆ˜(DFS)

by YWTechIT 2021. 4. 19.
728x90

๐Ÿ“Œ ๋ฐฑ์ค€ 11724 - ์—ฐ๊ฒฐ ์š”์†Œ์˜ ๊ฐœ์ˆ˜

๋ฌธ์ œ ์„ค๋ช…


๐Ÿ’ก ๋‚˜์˜ ํ’€์ด

์ด๋ฒˆ ๋ฌธ์ œ๋Š” BFS์™€ DFS ๋ชจ๋‘ ์ด์šฉํ•ด์„œ ํ’€์—ˆ๋Š”๋ฐ ์‹œ๊ฐ„ ์ฐจ์ด๊ฐ€ ๋งŽ์ด ๋‚˜์ง€ ์•Š์•˜๋‹ค.(๊ทผ์†Œํ•˜๊ฒŒ DFS๊ฐ€ 48m/s์ •๋„ ๋นจ๋ž๋‹ค.) ๋ฌด๋ฐฉํ–ฅ ๊ทธ๋ž˜ํ”„๊ฐ€ ์—†์„ ๋•Œ๋Š” ์ž…๋ ฅ๊ฐ’์„ ๋ฐ˜๋Œ€๋กœ ๋ฐ”๊ฟ”์„œ ๋„ฃ์–ด์ค˜๋„ ๋œ๋‹ค.

728x90

์˜ˆ์ œ ์ž…๋ ฅ1์„ ๊ทธ๋ฆผ์œผ๋กœ ํ‘œํ˜„ํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค. ๋ฌธ์ œ๋ฅผ ์‰ฝ๊ฒŒ ๊ทธ๋ฆผ์œผ๋กœ ํ‘œํ˜„ํ–ˆ๋‹ค. graph์˜ index๊ฐ€ ๋…ธ๋“œ์ด๋‹ค. DFS๋กœ ํ’€ ๋•Œ๋Š” ์ตœ๋Œ€ ์žฌ๊ท€ ๊ฐ’์„ ๋” ์—ด์–ด์ค˜์•ผ ํ’€๋ฆฐ๋‹ค.

 

import sys
sys.setrecursionlimit(1000000)
input = sys.stdin.readline

def dfs(graph, v, visited):    # dfs implementation
    visited[v] = True

    for i in graph[v]:
        if not visited[i]:
            dfs(graph, i, visited)

N, M = map(int, input().split())
graph = [[] for _ in range(N + 1)]
visited = [False] * (N + 1)

for i in range(M):
    node1, node2 = map(int, input().split())
    graph[node1].append(node2)
    graph[node2].append(node1)

cnt = 0
for i in range(1, N+1):    # check each node
    if not visited[i]:
        dfs(graph, i, visited)
        cnt += 1
print(cnt)
๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€