프로그래밍/Python

[Python] 백준 20040 사이클 게임

모영이 2021. 2. 16. 21:27

 

20040번: 사이클 게임

사이클 게임은 두 명의 플레이어가 차례대로 돌아가며 진행하는 게임으로, 선 플레이어가 홀수 번째 차례를, 후 플레이어가 짝수 번째 차례를 진행한다. 게임 시작 시 0 부터 n − 1 까지 고유한

www.acmicpc.net

유니온 파인드

처음 파이썬으로 돌렸을 때 런타임 에러가 났다. for문에서 find함수 사용을 없애고, union함수 내에서 인덱스 값을 저장하도록 했다. 그리고 합칠 때 부모의 최솟값으로 통일 되게 했는데 이렇게 안하면 런타임 에러가 났다.

 

1) 입력 받은 두 개의 점을 유니온 함수로 합친다.

2) 두개의 점의 부모가 다르면 합치고, 부모가 같으면 게임 끝.

3) 최초의 게임 끝일 때의 인덱스 값을 endgame에 저장하고 출력. 

 

전체 코드

import sys
input = sys.stdin.readline

n, m = map(int, input().split())
parents = [i for i in range(n)]
endgame = 0

def find(x):
    if x == parents[x]:
        return x
    else:
        y = find(parents[x])
        parents[x] = y
        return y

def union(x, y, indx):
    global endgame
    x = find(x)
    y = find(y)
    if x != y:
        parents[max(x,y)] = min(x,y)
    elif endgame == 0:
        endgame = indx

for i in range(m):
    a, b = map(int, input().split())
    union(a, b, i + 1)

print(endgame)