문제 참고
[이코테] 그래프 알고리즘 - 여행 계획 (tistory.com)
[이코테] 그래프 알고리즘 - 여행 계획
해당 포스팅의 문제의 출처는 나동빈님의 이것이 취업을 위한 코딩 테스트 교재를 공부하면서 풀이할 때 본인의 사고 과정 흐름과 문제 풀이를 기록하기 위함 입니다. 문제설명 한울이가 사는
techblog-history-younghunjo1.tistory.com
여행 계획에 있는 여행지가 이어져있는지만 확인하면 되고 이는 union-find에서 계획 속 각 여행지들이 같은 집합에 속하지는지만 확인하면 되는 문제다.
#풀이에서는 여행지 넘버가 0부터 시작된다고 가정했다. 편하게 구현하려고.
N, M = map(int, input().split())
graph = []
for _ in range(N):
graph.append(list(map(int, input().split())))
plan = list(map(int,input().split()))
parent = [i for i in range(N)]
def find(parent, x):
if parent[x] != x:
parent[x] = find(parent, parent[x])
return parent[x]
def union(parent, x, y):
px = find(parent, x)
py = find(parent, y)
if px < py:
parent[py] = px
else:
parent[px] = py
for i in range(N):
for j in range(N):
if j < i:
continue
if graph[i][j] == 1:
union(parent, i, j)
root = find(parent, plan[0])
for i in range(1, M):
if find(parent, plan[i]) != root:
print("NO")
exit(0)
print("YES")
'코딩 테스트 및 알고리즘 > 이것이 취업을 위한 코딩테스트다' 카테고리의 다른 글
Q43. 어두운 길 (0) | 2022.05.02 |
---|---|
Q42. 탑승구 (0) | 2022.05.01 |
[그래프] 위상 정렬 (어렵지 않다! 클릭클릭!) (0) | 2022.05.01 |
[그래프] 최소 신장 트리 minimum spanning tree (0) | 2022.04.30 |
[그래프] union-find 알고리즘 (0) | 2022.04.30 |