처음엔 간단한 이진탐색 문제라고 생각하고 접근했다.

1차 시도 : 이진 탐색

이진탐색을 통해서 반씩 잘라나가면서 계산하도록 했다.
하지만 재귀가 너무 많이 도는지, Segmentation Fault가 발생했다.

int binary_search(int n, int a, int b) {
    if (a <= n / 2 && b > n / 2) {
        return log2(n);
    }
    else if (a > n / 2 && b > n / 2) {
        binary_search(n / 2, a - n / 2, b - n / 2);
    }
    else if (a <= n / 2 && b <= n / 2) {
        binary_search(n / 2, a, b);
    }
}

int solution(int n, int a, int b)
{
    int answer = 0;
    
    answer = binary_search(n, a, b);
    return answer;
}

2차 시도

이진 탐색으로는 Segmentation Fault가 발생해서, 접근법을 바꿨다.
주어진 n으로 계산하는 것이 아닌, a와 b로 계산을 하도록 했다.

a와 b가 같아질 때 까지 Loop를 돌아, 만나는 Round를 계산한다.

int solution(int n, int a, int b)
{
    int answer = 0;
    while (a != b) {
        a = (a + 1) / 2;
        b = (b + 1) / 2;
        answer++;
    }
    return answer;
}

int main() {
    cin >> n >> a >> b;
    cout << solution(n, a, b);
    return 0;
}