-
[백준] 20040 사이클 게임알고리즘 2023. 2. 17. 19:43728x90
문제
https://www.acmicpc.net/problem/20040
20040번: 사이클 게임
사이클 게임은 두 명의 플레이어가 차례대로 돌아가며 진행하는 게임으로, 선 플레이어가 홀수 번째 차례를, 후 플레이어가 짝수 번째 차례를 진행한다. 게임 시작 시 0 부터 n − 1 까지 고유한
www.acmicpc.net
풀이
- 문제에서 ' 사이클을 완성하는 순간 게임이 종료 ' 라는 말을 보고 우리가 기본적으로 아는 서로소 집합 ( union-find ) 이라고 생각했다
- ' m 번의 차례를 모두 처리한 이후에도 종료되지 않았다면 0을 출력한다. ' 을 볼 수 있는데, 이는 m번을 다돌았는데 다같이 find가 다를수있다는 말이다
- 이미 정답이 나왔으면 더이상 실행할 필요가 없다. ( 하지만 나는 데이터를 전부 받고 나서 진행했는데 성공했다 )
코드
# 골드4 - 사이클 게임 import sys input = sys.stdin.readline n, m = map(int, input().split()) parent = [i for i in range(n)] def find(x): if x != parent[x]: parent[x] = find(parent[x]) return parent[x] def union(a, b): a = find(a) b = find(b) if a < b: parent[b] = a else: parent[a] = b cnt = 0 data = [] for i in range(m): a, b = map(int, input().split()) data.append([a, b]) for i in range(m): if find(data[i][0]) != find(data[i][1]): union(data[i][0], data[i][1]) cnt += 1 else: break if cnt == m: print(0) else: print(cnt+1)
'알고리즘' 카테고리의 다른 글
[프로그래머스] LV1. 카드 뭉치 (0) 2023.03.09 [프로그래머스] Lv1. 바탕화면 정리 (0) 2023.03.08 [알고리즘] 백준 - 극장좌석 (0) 2023.02.15 [프로그래머스] 섬 연결하기 (0) 2023.02.15 [알고리즘] 백준 - 신나는 함수 실행 ( 9184 ) (0) 2023.02.03