레벨: 2
언어: Java
레벨 2중에서도 쉬운편에 속한 문제라고 생각한다..
알고리즘을 생각했을때 어떤한 방향을 잡고 가야되나 생각했던게 너무 간단하게 풀수있어서 매개변수 n이 왜주어진걸질 이해하지 못했다..
내가 작성한 코드는
1,2 / 3, 4 / 5, 6 / 7,8
이런식으로 되어있는데 여기서 +1을 하고 나누기 2를 시도하면 같은 그룹으로 묶이면서 나눠지고 최종적으로 원하는 2가지값이 일치할때 카운팅 수를 도출할수 있다는 코드이다.
가장 좋아요 많이 받은코드는
1. a = 4, b = 7 일때,
2. a - 1 = 3(11), b - 1 = 6(110) 이되면서(괄호는 비트입니다)
3. xor 비트연산자로 결과가 101 되고 length값이 3이되는데 bit 방식을 이용해서 풀었는데 풀이과정은 이해했지만, 좀더 고민해봐야겠다..
class Solution {
public int solution(int n, int a, int b) {
int answer = 0;
while(a != b) {
a = (a + 1) / 2;
b = (b + 1) / 2;
answer++;
}
return answer;
}
}
class Solution
{
public int solution(int n, int a, int b)
{
return Integer.toBinaryString((a-1)^(b-1)).length();
}
}