ํ‹ฐ์Šคํ† ๋ฆฌ ๋ทฐ

728x90
๋ฐ˜์‘ํ˜•

๋ฌธ์ œ

 

11724๋ฒˆ: ์—ฐ๊ฒฐ ์š”์†Œ์˜ ๊ฐœ์ˆ˜

์ฒซ์งธ ์ค„์— ์ •์ ์˜ ๊ฐœ์ˆ˜ N๊ณผ ๊ฐ„์„ ์˜ ๊ฐœ์ˆ˜ M์ด ์ฃผ์–ด์ง„๋‹ค. (1 ≤ N ≤ 1,000, 0 ≤ M ≤ N×(N-1)/2) ๋‘˜์งธ ์ค„๋ถ€ํ„ฐ M๊ฐœ์˜ ์ค„์— ๊ฐ„์„ ์˜ ์–‘ ๋์  u์™€ v๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. (1 ≤ u, v ≤ N, u ≠ v) ๊ฐ™์€ ๊ฐ„์„ ์€ ํ•œ ๋ฒˆ๋งŒ ์ฃผ๏ฟฝ๏ฟฝ

www.acmicpc.net

 

๋ฌธ์ œ ํ’€์ด

 ์ด ๋ฌธ์ œ๋Š” ๋ฐฉํ–ฅ์ด ์—†๋Š” ๊ทธ๋ž˜ํ”„๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ, ์—ฐ๊ฒฐ ์š”์†Œ์˜ ๊ฐœ์ˆ˜๋ฅผ ์ฐพ๋Š” ๋ฌธ์ œ์ด๋‹ค. ์—ฐ๊ฒฐ ์š”์†Œ๋Š” ํŠน์ • ๋…ธ๋“œ๋ฅผ ์‹œ์ž‘์œผ๋กœ ๋ฐฉ๋ฌธ ๊ฐ€๋Šฅํ•œ ๋‹ค๋ฅธ ๋…ธ๋“œ์˜ ์ง‘ํ•ฉ์ด๋‹ค. ์—ฐ๊ฒฐ ์š”์†Œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ฐพ์„ ์ˆ˜ ์žˆ๋‹ค.

 

  • 1๋ฒˆ ๋…ธ๋“œ๋ฅผ ์‹œ์ž‘์œผ๋กœ ํƒ์ƒ‰์„ ์‹œ์ž‘ํ•œ๋‹ค.
    • 1๋ฒˆ ๋…ธ๋“œ ํƒ์ƒ‰ ์‹œ ๋ฐฉ๋ฌธํ•œ ๋…ธ๋“œ, ์ฆ‰ ์—ฐ๊ฒฐ ์š”์†Œ๋“ค์„ ์ฒดํฌํ•œ๋‹ค.
    • ํƒ์ƒ‰์ด ์™„๋ฃŒ ๋˜๋ฉด, ํ•˜๋‚˜์˜ ์—ฐ๊ฒฐ ์š”์†Œ๋ฅผ ์ฐพ์€ ๊ฒƒ์ด๋‹ค.
  • ํƒ์ƒ‰ ๋˜์ง€ ์•Š๋Š” ๋…ธ๋“œ๊ฐ€ ๋‚จ์•„์žˆ๋‹ค๋ฉด, ํƒ์ƒ‰ ๋˜์ง€ ์•Š๋Š” ๋…ธ๋“œ๋ฅผ ์‹œ์ž‘์œผ๋กœ ๋‹ค์‹œ ํƒ์ƒ‰ํ•œ๋‹ค.
    • ํƒ์ƒ‰์ด ์™„๋ฃŒ๋˜๋ฉด, ํ•˜๋‚˜์˜ ์—ฐ๊ฒฐ ์š”์†Œ๊ฐ€ ์ถ”๊ฐ€ ๋œ๋‹ค.
  • ์œ„์˜ ๊ณผ์ •์˜ ๋ฐ˜๋ณต์„ ํ†ตํ•ด, ์—ฐ๊ฒฐ ์š”์†Œ๋ฅผ ์ฐพ์„ ์ˆ˜ ์žˆ๋‹ค.
  • ์ž…๋ ฅ ์˜ˆ์ œ 1์˜ ๊ฒฝ์šฐ ํƒ์ƒ‰์ด ์™„๋ฃŒ๋˜๋ฉด ๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด 2๊ฐœ์˜ ์—ฐ๊ฒฐ์š”์†Œ๊ฐ€ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์ฐพ์„ ์ˆ˜ ์žˆ๋‹ค.

 ์ฆ‰, ์ •๋ฆฌํ•˜์ž๋ฉด ํ•˜๋‚˜์˜ ๋…ธ๋“œ๋ฅผ ์‹œ์ž‘์œผ๋กœ ๊ทธ๋ž˜ํ”„ ํƒ์ƒ‰์„ ์‹œ์ž‘ํ•ด๋ณด๊ณ , ๋ฐฉ๋ฌธ ์—ฌ๋ถ€๋ฅผ ์ฒดํฌํ•˜์—ฌ ์ค‘๋ณต ํƒ์ƒ‰์ด ๋˜์ง€ ์•Š๋„๋กํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ์ด๋Š” 1 - 3 - 2 - 4๋ผ๋Š” ์—ฐ๊ฒฐ ์š”์†Œ๊ฐ€ ์žˆ๋‹ค๋ฉด 3, 2, 4 ์–ด๋–ค ๋…ธ๋“œ์—์„œ ์‹œ์ž‘ํ•˜๋”๋ผ๋„ ๊ฐ™์€ ์—ฐ๊ฒฐ ์š”์†Œ๋ฅผ ์˜๋ฏธํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ํ•œ๋ฒˆ์˜ ๊ทธ๋ž˜ํ”„ ํƒ์ƒ‰ ํ›„ ๋ชจ๋“  ๋…ธ๋“œ๋ฅผ ๋ฐฉ๋ฌธํ•˜์˜€๋‹ค๋ฉด, ์—ฐ๊ฒฐ ์š”์†Œ๋Š” 1์ด ๋˜๊ณ  ์•„๋‹ ๊ฒฝ์šฐ๋Š” ์ถ”๊ฐ€์ ์ธ ํƒ์ƒ‰ ํšŸ์ˆ˜์— ๋”ฐ๋ผ ์—ฐ๊ฒฐ ์š”์†Œ๊ฐ€ ์ถ”๊ฐ€๋˜๊ฒŒ ๋œ๋‹ค.

 

์ฝ”๋“œ

from collections import deque
from sys import stdin


def bfs(start):
    global visited
    q = deque([start])

    while q:
        cur_node = q.popleft()
        for next_node in range(n):
            if graph[cur_node][next_node] and not visited[next_node]:
                visited[next_node] = True
                q.append(next_node)
    return 1

if __name__ == "__main__":
    answer = 0
    # input()์„ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ, ์‹œ๊ฐ„ ์ดˆ๊ณผ๊ฐ€ ๋ฐœ์ƒํ•จ
    n, m = map(int, stdin.readline().split())
    graph = [[False] * n for _ in range(n)]
    visited = [False] * n
    for _ in range(m):
        i, j = map(int, stdin.readline().split())
        # ๊ทธ๋ž˜ํ”„๋Š” ์–‘๋ฐฉํ–ฅ์ด๋ฏ€๋กœ ๋ฐ˜์ „ํ•˜์—ฌ ์ฒดํฌํ•ด์ค˜์•ผ ํ•จ
        graph[i - 1][j - 1] = True
        graph[j - 1][i - 1] = True

    for node in range(n):
        if not visited[node]:
            visited[node] = True
            answer += bfs(node)

    print(answer)

 ํ•ด๋‹น ๋ฌธ์ œ๋ฅผ ํ’€ ๊ฒฝ์šฐ, `input()`์„ ์‚ฌ์šฉํ•˜๋ฉด ์‹œ๊ฐ„์ดˆ๊ณผ๊ฐ€ ๋ฐœ์ƒํ•˜๊ฒŒ ๋œ๋‹ค. ๋”ฐ๋ผ์„œ `sys.stdin.readline`์„ ์‚ฌ์šฉํ•˜์—ฌ์•ผ ํ•œ๋‹ค. ๋˜ํ•œ, ๋…ธ๋“œ์˜ ๋ฐฉ๋ฌธ ์—ฌ๋ถ€๋ฅผ ์ฒดํฌ ํ•  ๋•Œ, ๋ฆฌ์ŠคํŠธ์— `append`ํ•˜๋Š” ๋ฐฉ์‹๋ณด๋‹ค ๋ฏธ๋ฆฌ ์ดˆ๊ธฐํ™”๋œ ๋ฆฌ์ŠคํŠธ์˜ ๊ฐ’์„ ๊ฐฑ์‹ ํ•ด์ฃผ๋Š” ๊ฒƒ์ด ํšจ์œจ์ ์ด๋‹ค.

728x90
๋ฐ˜์‘ํ˜•
๋Œ“๊ธ€
๊ธ€ ๋ณด๊ด€ํ•จ
์ตœ๊ทผ์— ์˜ฌ๋ผ์˜จ ๊ธ€
์ตœ๊ทผ์— ๋‹ฌ๋ฆฐ ๋Œ“๊ธ€