파이썬 문제풀이
[백준 파이썬] 20040 사이클 게임
냄비짱
2023. 12. 6. 20:05
728x90
📌문제 출처
백준 단계별 문제풀이 : 유니온 파인드
https://www.acmicpc.net/problem/20040
20040번: 사이클 게임
사이클 게임은 두 명의 플레이어가 차례대로 돌아가며 진행하는 게임으로, 선 플레이어가 홀수 번째 차례를, 후 플레이어가 짝수 번째 차례를 진행한다. 게임 시작 시 0 부터 n − 1 까지 고유한
www.acmicpc.net
❓ 문제
📗 풀이 코드
'''
find 함수로 해당 노드와 이어진 최소 노드를 찾아 parents에 넣고, union 함수로 같은 parents를 만들어준다.
두개 노드씩 입력값을 받으면서 두 노드의 parents가 이미 같다면 사이클이 처음으로 완료되는 지점이다.
두 노드의 parents가 다르다면 union을 계속 진행한다.
'''
input = open(0).readline
def solution():
def find(a): # 해당 노드와 이어진 최소 노드 찾기
if a != parents[a]:
parents[a] = find(parents[a])
return parents[a]
def union(a,b) : # 이어진 노드간 같은 parents 만들기
a,b = find(a),find(b)
if a == b : # union 이전 이미 같은 노드라면
return True # 사이클 완성
if a < b : # b가 더 크면
parents[b] = a # 작은 값으로 parents 맞추기
else :
parents[a] = b
return False # 사이클 미완성
n,m = map(int, input().split())
parents = list(range(n+1)) # 해당 인덱스와 이어진 노드의 최소값
for i in range(1,m+1) :
a,b = map(int,input().split())
if union(a,b) :
return i
return 0 # 사이클이 완성되지 않았다면 0 반환
if __name__ == '__main__':
print(solution())