첫번째 코드
2차원 행렬로 유니온 파인드를 적용해야하나 그건 어떻게 하는거지? 고민을 했는데
책을 참고하고 코드를 작성했을 때
유니온 파인드를 어떻게 사용할 것인지 생각을 잘 해야할 것 같다!
문제는 행렬이지만
유니온 파인드로 결국 부모 노드를 찾는 것이므로 행렬일 필요가 없다!
import sys
input = sys.stdin.readline
n = int(input())
m = int(input())
city= [[0 for j in range(n+1)] for i in range(n+1)]
for i in range(1, n+1):
city[i] = list(map(int, input().split()))
city[i].insert(0, 0)
route = list(map(int, input().split()))
route.insert(0, 0)
parent = []
for i in range(n+1):
parent.append(i)
def find(a):
if a == parent[a]:
return a
else:
parent[a] = find(parent[a])
return parent[a]
def union(a, b):
a = find(a)
b = find(b)
if a != b:
parent[b] = a
for i in range(1, n+1):
for j in range(1, n+1):
if city[i][j] == 1:
union(i, j)
index = find(route[1])
isconnected = True
for i in range(2, len(route)):
if index != find(route[i]):
isconnected = False
break
if isconnected:
print("YES")
else:
print("NO")
통과
find와 union 함수 구성은 익숙해지고 있지만 아직 문제를 풀 정도로 유연하게 사용하지는 못하는 느낌이다!
링크
programmers/백준/Gold/1976. 여행 가자 at main · ornni/programmers
repository for recording Programmers Algorithm problem solving - ornni/programmers
github.com
'코딩 테스트 > do it! 알고리즘 코딩테스트' 카테고리의 다른 글
054 임계경로 (0) | 2024.07.02 |
---|---|
052 거짓말 (0) | 2024.06.27 |
050 집합의 표현 (0) | 2024.06.25 |
049 물통 (0) | 2024.06.25 |
048 이분 그래프 (0) | 2024.06.20 |