잘 생각해보면, 아주 쉽게 풀 수 있는 문제이다.
규칙을 생각해보자. 만약 1번↔2번
끼리 겨루는 게임에서 2번이 승리했다면 다음 라운드에서 1번을 부여받고, 3번↔4번
에서 겨루는 게임에서 3번이 승리했다면 다음 라운드에서 2번을 부여받게 된다.
즉, (자신의 번호 + 1) / 2
하면 이겼을 때 다시 부여받는 번호를 구할 수 있다!!
a와 b가 만나는 라운드는, 이겼을 때 올라가는 라운드가 같은 라운드인지를 확인하면 된다.
class Solution{
public static int solution(int n, int a, int b){
int round = 1;
while(true){
// 이겼을 때 올라가는 라운드가 같은 라운드면
if ((a + 1) / 2 == (b + 1) / 2) {
break;
}
a = (a + 1) / 2;
b = (b + 1) / 2;
round ++;
}
return round;
}
}
난이도 : LEVEL 2
if(Math.abs(a-b)==1)
와 같이 조건을 걸었는데, 총 4명의 참가자 중 a와 b가 2,3번을 부여받는다면 같은 라운드가 아니다. 그래서 이런 조건으로는 같은 라운드인지 구할 수 없다!딱히 없음