위의 풀이는 다른 풀이를 참조하여 풀었다..ㅠㅠ
원래는 아래의 코드 처럼 XOR과 bitCount를 활용해서 문제를 풀었는데 초반에는 괜찮았으나, 10,11 테스트 케이스에서 시간 초과가 났다. 1씩 증가하여 모든 과정을 조회하는 과정을 거쳐서 그런 듯하다.
class Solution {
public long[] solution(long[] numbers) {
long[] answer = new long[numbers.length];
for (int i = 0; i < numbers.length; i++) {
long num = numbers[i];
if (num % 2 == 0) {
answer[i] = num + 1;
} else {
String numStr = "0" + Long.toBinaryString(num);
int lastZeroIdx = numStr.lastIndexOf("0");
String newStr = numStr.substring(0, lastZeroIdx) + "10" + numStr.substring(lastZeroIdx + 2);
answer[i] = Long.parseLong(newStr, 2);
}
}
return answer;
}
}
class Solution {
public long[] solution(long[] numbers) {
long[] answer = new long[numbers.length];
for (int i = 0; i < numbers.length; i++) {
long a = numbers[i];
long b = a;
while(true) {
long result = a ^ ++b;
if (Long.bitCount(result) <= 2) {
answer[i] = b;
break;
}
}
}
return answer;
}
}