문제
문제 풀이
A 와 B의 차이는 1이면서 같은 대진에 있어야 만났을 때이다. 그렇게 계산을 하려면 diff 변수 하나와 둘 중 큰값이 짝수라면 같은 대진에 있다고 할 수있다.
diff = Math.abs(a - b);
if (diff == 1 && Math.max(a, b) % 2 == 0) {
return answer;
}
나의 답안
public static int solution(int n, int a, int b) {
int answer = 1;
int diff = 0;
while (true) {
diff = Math.abs(a - b);
if (diff == 1 && Math.max(a, b) % 2 == 0) {
return answer;
}
a = (a + 1) / 2;
b = (b + 1) / 2;
answer++;
}
}
다른 답안
A-1, B-1 의 2진수를 xor로 계산하고 나온 결과 값 2진수의 길이를 반환한 결과이다. 비트 규칙에 대한 이해도가 높은 분이 써 놓은 코드라서 한번 남겨봅니다.
class Solution
{
public int solution(int n, int a, int b)
{
return Integer.toBinaryString((a-1)^(b-1)).length();
}
}