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)
'프로그래밍 > Python' 카테고리의 다른 글
[Python] 백준 13305 주유소 (0) | 2021.02.19 |
---|---|
[Python] 백준 4195 친구 네트워크 (0) | 2021.02.19 |
[Python] 백준 1504 특정한 최단 경로 (0) | 2021.02.16 |
[Python] 백준 11404 플로이드 (0) | 2021.02.16 |
[Python] 백준 2470 두 용액 (0) | 2021.02.15 |