백준/실버

[백준 1057번] 토너먼트 (C++)

게임개발기원 2025. 3. 2. 21:42

문제링크 : https://www.acmicpc.net/problem/1057

#include <bits/stdc++.h>
using namespace std;

int main(void)
{
    ios_base::sync_with_stdio(false);
    cin.tie(0);

    int n, a, b, cnt = 0;
    cin >> n >> a >> b;

    while(a!=b)
    {
        a = (a+1)/2;
        b = (b+1)/2;
        cnt++;
    }

    cout << cnt;

    return 0;
}

 

각 값들을 2로 나누면서 같아지는 순간을 체크한다.

다만 단순히 2를 나누는 것이 아니라 1을 더해주어야 한다.

7, 8을 예시로 들면 7/2 = 3, 8/2 = 4 이기에 둘 다 같은 4를 반환하려면 1을 더해줄 필요가 있다.

(8/2 = 4, 9/2 = 4)