• Home
  • About
    • JOOS photo

      JOOS

      Joos's blog

    • Learn More
    • Email
    • Github
  • Posts
    • All Posts
    • All Tags
  • Projects

[백준] 11724번 : 연결 요소의 개수 with python3

22 Sep 2018

Reading time ~1 minute

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

목표 :

  • 연결되지 않는 노드들의 개수를 구하라

조건 :

  • 첫째 줄에 정점의 개수 N과 간선의 개수 M이 주어진다. (1 ≤ N ≤ 1,000, 0 ≤ M ≤ N×(N-1)/2)
  • 둘째 줄부터 M개의 줄에 간선의 양 끝점 u와 v가 주어진다. (1 ≤ u, v ≤ N, u ≠ v)
  • 같은 간선은 한 번만 주어진다.

푸는법 :

  • bfs와 dfs 모두 구할 수 있다.

dfs 로 구하기

import sys
sys.setrecursionlimit(10**6)
# n은 10**3인데 for문 두번이랑 같으니 10 **6으로 해야한다
n, k = map(int, input().split())
# a = [list(map(int, input().split())) for _ in range(k)]
graph = {}
for i in range(1,n+1):
  graph[i] = set()
for _ in range(k):
  a, b = map(int, input().split())
  graph[a].add(b)
  graph[b].add(a)
visited = [False] * (n+1)
def dfs(v):
  global visited, graph
  if visited[v]: return
  # 만약 이미 visited한 거면 return
  visited[v] = True
  for i in graph[v]:
    return dfs(i)
ans = 0
for j in range(1,n+1):
  if visited[j] == False:
    dfs(j)
    ans += 1
print(ans)

bfs로 구하기

import sys
sys.setrecursionlimit(10**6)

n, m = map(int, sys.stdin.readline().split())
graph = {}

for i in range(1, n+1):
    graph[i] = set()
chk = [False]*(n+1)

for _ in range(m):
    a, b = map(int, sys.stdin.readline().split())
    graph[a].add(b)
    graph[b].add(a)

def bfs(i):
    chk[i] = True
    for s in graph[i]:
        if not chk[s]:
            bfs(s)


ans = 0
for i in range(1, n+1):
    if not chk[i] :
        bfs(i)
        ans += 1
print(ans)


algorithm백준 Share Tweet +1