숫자 n이 있다고 가정합니다. 따라서 토너먼트에는 몇 가지 규칙이 있는 n개의 팀이 있습니다 -
-
현재 팀 수가 짝수이면 각 팀이 다른 팀과 병합됩니다. 그리고 총 (n/2) 경기가 진행되며, 그 중 (n/2) 승자가 다음 라운드로 진출합니다.
-
팀 수가 홀수인 경우 토너먼트에서 한 팀이 무작위로 이동하고 나머지 팀이 병합됩니다. 따라서 총 (n-1)/2 경기가 진행되고 (n-1)/2+1 팀이 승자로 다음 라운드로 이동합니다.
최종 승자를 얻으려면 총 경기 수를 찾아야 합니다.
따라서 입력이 n =10과 같으면 출력은 9가 됩니다.
-
처음에는 5-5개의 디비전이 있으며 그 중 5개가 자격을 갖추게 됩니다.
-
이제 한 팀을 게임에 전달하고 2-2 팀을 나누어 3팀이 자격을 얻습니다.
-
이제 한 팀을 게임에 넘기고 1-1 팀을 나누어 2팀이 자격을 얻습니다.
-
1-1로 나누어 1명이 승자로 결정됩니다.
이 문제를 해결하기 위해 다음 단계를 따릅니다. −
-
답변 :=0
-
n이 1과 같지 않은 동안 수행
-
f :=(n/2)의 바닥
-
나머지 :=n 모드 2
-
ans :=ans + f
-
n :=f + 나머지
-
-
반환
예제(파이썬)
이해를 돕기 위해 다음 구현을 살펴보겠습니다. −
def solve(n): ans = 0 while n != 1: f = n//2 remainder = n % 2 ans += f n = f + remainder return ans n = 10 print(solve(n))
입력
10
출력
9