- [백준] 11724번 연결 요소의 개수 파이썬(Python) 풀이2022년 10월 31일
- Cat_Code
- 작성자
- 2022.10.31.오후02:07
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
[문제]
[코드]
import sys sys.setrecursionlimit(100000) input = sys.stdin.readline def dfs(start, depth): visited[start] = True for i in graph[start]: if not visited[i]: dfs(i, depth + 1) n,m = map(int, input().split()) graph = [[] for _ in range(n+1)] for _ in range(m): a, b = map(int, input().split()) graph[a].append(b) graph[b].append(a) count = 0 visited = [False] * (n+1) for i in range(1, n+1): if not visited[i]: if not graph[i]: count += 1 visited[i] = True else: dfs(i, 0) count += 1 print(count)
[해설]
DFS - 깊이 우선 탐색을 통해서 문제를 풀이하는 방식이다
우선 아래의 부분은
sys.setrecursionlimit(100000)
지정하지 않으면 백준에서 에러가 뜨기 때문에 깊이의 범위를 설정해준다
핵심 코드는 아래의 dfs 코드와
def dfs(start, depth): visited[start] = True for i in graph[start]: if not visited[i]: dfs(i, depth + 1)
for 문을 사용해서 dfs를 돌려 이미 방문했던 곳이면 넘어가고
아무것도 연결되어 있지 않는 곳이라면 count에 1을 올려주고 방문처리한다
그리고 나머지의 dfs 함수를 돌려서 방문처리한고 count에 1을 올려준다
for i in range(1, n+1): if not visited[i]: if not graph[i]: count += 1 visited[i] = True else: dfs(i, 0) count += 1
'[연습의 흔적들] > 백준⚾' 카테고리의 다른 글
[백준] 9440번 숫자 더하기 파이썬 풀이 (0) 2022.11.26 [백준] 1213번 팰린드롬 만들기 파이썬 풀이 (0) 2022.11.25 [백준] 1012번 유기농 배추 파이썬(Python) 풀이 (0) 2022.10.26 [백준] 1260번 DFS와 BFS 파이썬(Python) 풀이 (0) 2022.10.24 [백준] 1021번 회전하는 큐 파이썬(Python) 풀이 (0) 2022.10.22 다음글이전글이전 글이 없습니다.댓글
스킨 업데이트 안내
현재 이용하고 계신 스킨의 버전보다 더 높은 최신 버전이 감지 되었습니다. 최신버전 스킨 파일을 다운로드 받을 수 있는 페이지로 이동하시겠습니까?
("아니오" 를 선택할 시 30일 동안 최신 버전이 감지되어도 모달 창이 표시되지 않습니다.)