백준/ Silver 2 문제 , 백준 파이썬 11724 , 연결 요소의 개수
Check Point ! ( 해당사항 ✓체크 )
1. 막힘 없이 수월하게 풀린 문제인가?
2. 1시간이내로 풀렸던 문제인가?
3. 1시간 이상 or 며칠을 두고 풀어봤더니 풀린 문제인가?
4. 시간을 써도 도무지 풀 수 없는 문제인가?
5. 솔루션을 찾아봤는가?
-------------------------------------------------------------------------------------------
난이도 체감
1. 최상
2. 상
3. 중
4. 하
<이해도>
1. 완벽히 이해
2. 다소 헷갈리는 부분들이 있음
3. 이해 못함
<덧붙일 말>
파이썬에는 재귀가 1000번까지로 제한이 있어서 sys.setrecursionlimit() 을 사용해 제한을 늘려줘야한다.
이거때문에 런타임 에러가 났었다.
<문제 출처>
https://www.acmicpc.net/problem/11724
------------------------------------------------------------------------------------------------------------------------------
여유롭게 10만 까지로 늘려주자.
이후 dfs 코드를 작성.
다른 식들은 보통 dfs 문제 코드들이랑 비슷하고, 이 문제에선
이 코드가 핵심.
노드가 연결 되어있다면 dfs 가 실행될때 그 연결된 노드들이 모두 visitied=True 처리 될것이다.
그 말인 즉슨, 저 if visited[i]=False 의 조건에 해당되는 갯수 만큼의 연결요소들이 형성 되어 있다는 점이다.
그러므로 cnt 변수를 선언해 몇번 if 문 내로 들어오게 되는지 카운트 해주면 그 값이 연결요소의 갯수이다.
------------------------------------------------------------------------------------------------------------------------------
정답
import sys
sys.setrecursionlimit(100000)
input=sys.stdin.readline
def dfs(u):
visited[u]=True
for i in graph[u]:
if not visited[i]:
dfs(i)
N,M=map(int,input().split())
graph=[[] for _ in range(N+1)]
visited=[False]*(N+1)
cnt=0
for _ in range(M):
u,v=map(int,input().split())
graph[u].append(v)
graph[v].append(u)
for i in range(1,N+1):
if visited[i]==False:
dfs(i)
cnt+=1
print(cnt)
반응형
'알고리즘 공부 > 백준 - 파이썬' 카테고리의 다른 글
백준/ Silver 1 문제 , 백준 파이썬 9465 , 스티커 (0) | 2022.02.16 |
---|---|
백준/ Silver 5 문제 , 백준 파이썬 11170 , 0의 개수 (0) | 2022.02.15 |
백준/ Silver 1 문제 , 백준 파이썬 15989 , 1, 2, 3 더하기 4 (0) | 2022.02.13 |
백준/ Silver 5 문제 , 백준 파이썬 11576, Base Conversion (0) | 2022.02.13 |
백준/ Silver 5 문제 , 백준 파이썬 7785 , 회사에 있는 사람 (0) | 2022.02.12 |