https://school.programmers.co.kr/learn/courses/30/lessons/12985
처음에 진짜 어렵게 접근하였다.
a와 b가 큰줄기로 따졌을 때 같은 토너먼트 구역에 있는가를 체크하는 과정과 a와 b가 토너먼트를 올라갔을 때의 바뀌는 번호를 a와 b에 저장했다.
하지만 올바른 접근이 아니어서 계속 틀렸고 30분 이내에 풀지 못해서 다른 분의 출이를 참고했다.
import java.util.*;
class Solution
{
public int solution(int n, int a, int b)
{
//토너먼트 앞에서부터 1번
//게임 참가자수 N (N의 2의 n승)
// 처음 라운드 A번 가진 참가자
// 경쟁자로 생각하는 B번 참가자와 몇 번째 라운드에서 만나는지 return
int answer = 0;
while(true){
// 토너먼트를 올라 갈때 선택되는 번호
a= a%2==0? a/2 : a/2+1;
b= b%2==0? b/2 : b/2+1;
answer++;
// 같은 경우 그 전에 토너먼트에서 만났다는 의미이므로 break;
if(a==b) break;
}
return answer;
}
}