[백준/파이썬] 1057번 토너먼트 풀이

업데이트:



문제 정보


풀이

문제

토너먼트 참가자 번호 k, l가 주어질 때 두 사람이 몇 라운드에서 만나는지 구하는 문제입니다.

끝까지 만나지 않으면 -1을 출력합니다.

코드

n, k, l = map(int, input().split())
people = [i for i in range(1, n+1)]

cnt = 1
flag = False
while True:
    for i in range(n//2):
        first = people[2*i]
        second = people[2*i+1]
        if (k, l) == (first, second) or\
        (l, k) == (first, second):
            print(cnt)
            flag = True
            break
        elif k == first or k == second:
            people[i] = k
        elif l == first or l == second:
            people[i] = l
        else:
            people[i] = first
    if flag or n==1:
        break
    if n % 2 == 1:
        people[i+1] = people[n-1]
    n  = n // 2 + n % 2
    cnt += 1
if not flag:
    print(-1)

설명

매 라운드마다 인접한 두 사람을 한 경기로 묶어 다음 라운드 진출자를 새로 구성합니다.

각 경기에서 kl이 맞붙는 순간 라운드 번호를 출력하고 종료합니다. 끝까지 만나지 않으면 -1입니다.



댓글남기기