class Solution
{
public int solution(int n, int a, int b)
{
int answer = 0;
int cnt = 0;
if(a>b) {
int temp = a;
a = b;
b= temp;
}
// 무조건 a < b
while(true) {
if( a %2== 1 && b - 1 == a ) {
cnt++;
break;
}
if(a % 2 == 1) {
a = a+1;
}
if(b % 2 == 1) {
b = b+1;
}
a = a / 2;
b = b / 2;
cnt++;
if( a % 2== 1 && b-1 ==a ) {
cnt++;
break;
}
}
return cnt;
}
}
(1) B참가자의 번호가 앞에 있을 수 있으니 비교하여 작은 수가 A참가자의 번호가 될 수 있게 해준다.
(2) 만약 A참가자의 번호가 홀수이고 B참가자의 번호 -1 = A 를 만족한다면 두 참가자가 만났음을 뜻하므로 cnt++ 해주고 종료
(3) 그렇지 않다면 위 조건을 만족할 때까지 반복
처음에 총 명수 N을 주고 조건에 2^x 승이 있길래 꼼수 써서 풀라는줄 알고 너무 쉽게 생각했다. 풀다보니 가장 작은 경의수부터 차례로 반복되는 조건을 찾는 순서로 계속 풀어보자