728x90
유니온 파인드인줄 알았는데 아니었다. DFS 였다.
그저 A,B,C,D,E 가 각각 한명씩만 친구 관계로 연결되어있는 것을 확인하면 된다.
즉, DFS의 깊이가 4인지 확인하는 문제다.
A - B(depth == 1) - C(depth == 2) - D(depth == 3) - E(depth == 4)
if finish : return 을 통해 시간을 줄여준다.
이미 finish가 True라면 깊이가 4인 dfs를 돌았다는 것이고 추가로 확인하지않아도 되기 때문이다.
코드 :
def dfs(now, depth) :
global finish
if finish : return
# 왔음을 표시
vis[now] = 1
if depth == 4 :
finish = 1
return
# 친구 목록을 돌면서
for i in f[now] :
if not vis[i] :
dfs(i,depth+1)
vis[i] = 0
if __name__=="__main__" :
n,m = map(int,input().split())
f = [[] for _ in range(n)]
finish = 0
vis = [0]*(n+1)
for i in range(m) :
a,b = map(int,input().split())
f[a].append(b)
f[b].append(a)
for i in range(n) :
dfs(i,0)
vis[i] = 0
if finish : break
if finish : print(1)
else : print(0)
참고 블로그 :
https://jshong1125.tistory.com/19
반응형
'알고리즘 > 백준 문제풀이' 카테고리의 다른 글
[Python/BOJ] 백준 23325 마법천자문_DP (0) | 2022.09.02 |
---|---|
[삼성SW역량][Python/BOJ] 백준 20057 마법사 상어와 토네이도_(구현) (0) | 2022.08.31 |
[Python/백준]전깃줄(DP) (0) | 2022.08.29 |
[Python/BOJ] 백준 2579 계단오르기_DP (0) | 2022.08.29 |
[삼성SW역량][Python/BOJ] 백준 15683 감시_(DFS+구현) (0) | 2022.08.26 |