새로운 블로그로 이전 작업을 진행하고 있어 포스트가 새로 작성되고 있지 않습니다.

빠른 시일 내에 새로운 블로그로 인사드리겠습니다.

새로운 블로그 : https://unho.vercel.app/

본문 바로가기
알고리즘 문제풀이/Python

[백준] 20040 사이클 게임

by 언호 2022. 4. 15.

📖 문제


🧑🏻‍💻 풀이 과정

1) 문제 이해 및 접근

노드들 간에 사이클로 연결이 되어있는지 판단을 하기 위하여 서로소를 이용하였습니다.

서로소는 두개의 노드가 연결이 되어 있다면 하나의 동일한 최상위 부모를 가리키게 됩니다.

 

따라서 두 노드의 최상위 노드가 서로 다르면 연결이 되어 있지 않으므로 연결을 시켜주고, 두 노드의 최상위 노드가 같으면 이미 연결이 되어 있으므로 현재 간선을 잇게 된다면 사이클이 형성되는 방식을 이용하였습니다.

2) 알고리즘

  • 서로소 알고리즘

3) 풀이 코드

사용 언어 - Python

import sys
sys.stdin = open('input.txt')

def find(x):                                            # 최상위 부모 노드 탐색
    if x != s[x]:                                       # 현재 노드가 최상위가 아니면
        x = find(s[x])                                  # 최상위 부모 탐색
    return x

def union_set(x, y):                                    # 두개의 노드를 서로 합침
    x = find(x)                                         # x의 최상위 부모를 찾음
    y = find(y)                                         # y의 최상위 부모를 찾음

    if x != y:                                          # 서로 최상위 부모가 다르면
        s[y] = find(x)                                  # 하나로 합침
        return False
    else:                                               # 최상위 부모가 같다면 사이클 형성
        return True

N, M = map(int, sys.stdin.readline().split())           # 노드의 개수, 간선의 개수
s = list(range(N))                                      # 서로소 집합 구분을 위한 리스트

for i in range(1, M+1):
    a, b = map(int, sys.stdin.readline().split())       # 두개의 노드
    
    if a > b:                                           # a와 b 중 a가 큰값이 되도록 설정
        a, b = b, a

    if union_set(a, b):                                 # a와 b를 합침
        print(i)                                        # 사이클 발견되면 종료
        break
else:                                                   # 사이클이 없는 경우
    print(0)

📝 결과 및 학습한 내용

1) 어려웠던 내용

특별히 없습니다.

2) 새롭게 학습한 내용

특별히 없습니다.


🔗 문제 링크

- https://www.acmicpc.net/problem/20040

 

20040번: 사이클 게임

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

www.acmicpc.net

 

 

※ 오류 및 오타, 다른 의견이 있는 경우 댓글을 남겨주시면 감사하겠습니다

'알고리즘 문제풀이 > Python' 카테고리의 다른 글

[백준] 12852 1로 만들기 2  (0) 2022.04.19
[백준] 1005 ACM Craft  (0) 2022.04.16
[백준] 17404 RGB거리 2  (0) 2022.04.14
[백준] 2467 용액  (0) 2022.04.13
[백준] 2096 내려가기  (0) 2022.04.12

댓글