총 n명의 선수가 있는 토너먼트의 a번째 선수와 b번째 선수가 몇 번째 라운드에서 만나는지 찾아내야 하는 문제.
우선 총 라운드 수를 log2(n)으로 구하고 대진표의 결승전부터 탐색하도록 했다.
n을 절반으로 나눴을 때, a와 b가 서로 다른 구역에 있는지 여부를 통해 필요 라운드를 계산했다.
https://school.programmers.co.kr/learn/courses/30/lessons/12985
cpp code
#include <math.h>
using namespace std;
int solution(int n, int a, int b)
{
int answer = log2(n);
if (a > b) {int t=a;a=b;b=t;}
while (!(a <= n/2 && b > n/2)) {
answer--;
if (a > n/2) {
a -= n/2;
b -= n/2;
}
n /= 2;
}
return answer;
}