[백준/파이썬] 1057번 토너먼트 풀이
업데이트:
문제 정보
- 문제 출처: 백준 온라인 저지
- 문제 링크: 1057번 토너먼트
- 문제풀이 코드 GitHub 링크
- 제출 언어: Python 3
풀이
문제
토너먼트 참가자 번호 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)
설명
매 라운드마다 인접한 두 사람을 한 경기로 묶어 다음 라운드 진출자를 새로 구성합니다.
각 경기에서 k와 l이 맞붙는 순간 라운드 번호를 출력하고 종료합니다.
끝까지 만나지 않으면 -1입니다.
댓글남기기