알고리즘/[Python] 백준

(Python) 백준 1057번 : 토너먼트

 

출처 : https://www.acmicpc.net/problem/1057

 

1057번: 토너먼트

김지민은 N명이 참가하는 스타 토너먼트에 진출했다. 토너먼트는 다음과 같이 진행된다. 일단 N명의 참가자는 번호가 1번부터 N번까지 배정받는다. 그러고 난 후에 서로 인접한 번호끼리 스타를 한다. 이긴 사람은 다음 라운드에 진출하고, 진 사람은 그 라운드에서 떨어진다. 만약 그 라운드의 참가자가 홀수명이라면, 마지막 번호를 가진 참가자는 다음 라운드로 자동 진출한다. 다음 라운드에선 다시 참가자의 번호를 1번부터 매긴다. 이때, 번호를 매기는 순서는 처음

www.acmicpc.net


 

(Python) 백준 1057번 토너먼트

(Python) 백준 1057번 : 토너먼트

  • 알고리즘 분류
    • 수학
    • 시뮬레이션

In [1]:
#a와 b가 서로 승부하는가? 0(아니오) or 1(예) 출력
def fight(a,b):
    if(a%2==0 and b%2!=0 and a-b==1):
        return 1
    elif(b%2==0 and a%2!=0 and b-a==1):
        return 1
    else:
        return 0
In [2]:
total, kim, im = map(int, input().split())
16 8 9
In [3]:
cnt = 0
while(1):
    cnt += 1
    if(fight(kim, im)==1):
        break
    else:
        if(kim%2==0):
            kim = kim//2
        else:
            kim = kim//2 + 1
        if(im%2==0):
            im = im//2
        else:
            im = im//2 + 1
In [4]:
cnt
Out[4]:
4