문제 풀이/Programmers 문제 풀이

[Programmers_C++]#Level2_예상 대진표

Hardii2 2023. 12. 13. 19:01

 

#1. 문제

 

 


 

#2. 풀이

 

1. a와 b를 1을 더해주고 2로 계속 나눠준다.

  1. (a+1)/2와 (b+1)/2 하며 a와 b가 서로 같을 때까지 그 횟수를 카운트합니다.
  2. a와 b는 매번 이기며 토너먼트를 올라가며, 새로운 라운드에 가서 (a+1)/2 혹은 (b+1)/2 번호를 부여받기 때문입니다.

 


 

#3. 코드

 

#include <iostream>
#include <cstdlib>

using namespace std;

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

    // #1. a와 b의 참가자 번호가 같을 때 까지 2를 나누어준다.
    while(a != b)
    {
        // a가 첫 번째 부여받은 번호가 4라면, 다음 라운드에서 2를 부여받는다.
        a = (a+1)/2;
        // b가 첫 번째 부여받은 번호가 7라면, 다음 라운드에서 4를 부여받는다.
        b = (b+1)/2;
        answer++;
    }

    return answer;
}