Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 영상제작기
- 삼성SDS Brightics
- Brightics
- 모델링
- 삼성 SDS
- Brigthics
- 포스코 아카데미
- 캐글
- 삼성 SDS Brigthics
- Brigthics를 이용한 분석
- 데이터분석
- 삼성SDS Brigthics
- 브라이틱스
- 개인 의료비 예측
- 혼공
- 노코드AI
- 삼성SDS
- Brigthics Studio
- 혼공머신러닝딥러닝
- 브라이틱스 서포터즈
- 혼공머신
- 직원 이직률
- 포스코 청년
- Brightics를 이용한 분석
- 팀 분석
- 혼공학습단
- 직원 이직여부
- Brightics Studio
- 추천시스템
- 데이터 분석
Archives
- Today
- Total
데이터사이언스 기록기📚
[백준/Python] 11724번(그래프이론, 그래프탐색, DFS, BFS)_연결 요소의 개수 본문
Coding Test/백준(Python)
[백준/Python] 11724번(그래프이론, 그래프탐색, DFS, BFS)_연결 요소의 개수
syunze 2023. 4. 15. 00:50📌문제 유형
그래프이론, 그래프탐색, DFS, BFS (실버2)
📌문제
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
📌나의 문제풀이
- 시간초과
n,m = map(int,input().split())
def find_parent(parent, x):
if parent[x] != x:
parent[x] = find_parent(parent, parent[x])
return parent[x]
def union_parent(parent, a, b):
a = find_parent(parent, a)
b = find_parent(parent, b)
if a < b:
parent[b] = a
else:
parent[a] = b
parent = [i for i in range(n+1)]
link = []
for _ in range(m):
u,v = map(int,input().split())
link.append((u,v))
union_parent(parent, u, v)
for j in range(m):
union_parent(parent, link[j][0], link[j][1])
print(len(set(parent[1:])))
- 전형적인 DFS 문제로 해결
- graph에 양방향 값 넣기
- 이미 방문했다면, return / 이외는 DFS 탐색
- DFS 끝난 탐색은 하나의 graph완성이므로 ans 더하기
n,m = map(int,input().split())
graph = [[] for i in range(n+1)]
visited = [False] * (n+1)
for _ in range(m):
u,v = map(int,input().split())
graph[u].append(v)
graph[v].append(u)
ans = 0
def dfs(a,visited):
if visited[a] == True:
return
visited[a] = True
for num in graph[a]:
if not visited[num]:
dfs(num,visited)
else:
continue
for j in range(1,n+1):
if visited[j] == True:
continue
else:
dfs(j,visited)
ans += 1
print(ans)
📌 다른사람의 문제풀이
- 아무것도 연결되지 않은 단독 노드도 처리
백준 11724번 파이썬 문제풀이(큐와 그래프 - 연결 요소의 개수) - DFS, BFS
이문제는 간단히 연결된 노드들을 간선을 따라 dfs 혹은 bfs로 돌면서 방문한 노드들은 방문기록을 남기면 된다. 간선을 따라 연결된 노드들을 다 돌고 나서 dfs 나 bfs를 한번 빠져나올 때마다 카
ji-gwang.tistory.com
import sys
sys.setrecursionlimit(5000)
input = sys.stdin.readline
# dfs로 그래프를 탐색한다.
def dfs(start, depth):
#해당 노드 방문체크 한다.
visited[start] = True
# 해당 시작점을 기준으로 계속해서 dfs로 그래프를탐색한다.
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)
# 방문처리
visited = [False] * (1 + N)
count = 0 # 컴포넌트 그래프 개수 저장
# 1~N번 노드를 각각돌면서
for i in range(1, N + 1):
if not visited[i]: # 만약 i번째 노드를 방문하지 않았다면
if not graph[i]: # 만약 해당 정점이 연결된 그래프가 없다면
count += 1 # 개수를 + 1
visited[i] = True # 방문 처리
else: # 연결된 그래프가 있다면
dfs(i, 0) # dfs탐색을 돈다.
count += 1 # 개수를 +1
print(count)
📌 리뷰
- 같은 코드로 Python3를 돌렸을 때, recursion error 발생했는데 PyPy3에서는 정답
- " python 재귀 허용치 늘리기 위해 sys.setrecursionlimit(10000) 작성"
연결 요소의 개수-백준 11724번(python)
방향 없는 그래프가 주어졌을 때, 연결 요소 (Connected Component)의 개수를 구하는 프로그램을 작성하시오.첫째 줄에 정점의 개수 N과 간선의 개수 M이 주어진다. (1 ≤ N ≤ 1,000, 0 ≤ M ≤ N×(N-1)/2) 둘
velog.io
728x90
'Coding Test > 백준(Python)' 카테고리의 다른 글
[백준/Python] 9655번(수학, DP, 게임이론)_돌 게임 (0) | 2023.04.15 |
---|---|
[백준/Python] 1758번(그리디, 정렬)_알바생 강호 (0) | 2023.04.15 |
[백준/Python] 2644번(그래프이론, 그래프탐색, DFS,BFS)_촌수계산 (0) | 2023.04.14 |
[백준/Python] 9017번(구현)_ 크로스 컨트리 (0) | 2023.04.13 |
[백준/Python] 1436번(브루트포스 알고리즘(완탐))_영화감독 숌 (0) | 2023.04.12 |
Comments