class Solution {
public long[] solution(long[] numbers) {
long[] answers = new long[numbers.length];
for (int i=0;i<numbers.length;i++) {
long cur = numbers[i];
String b1 = Long.toString(cur,2);
if ( cur %2 ==0) {
answers[i] = Long.parseLong(b1.substring(0,b1.length()-1) + "1",2);
continue;
}
b1 = "0" + b1;
int i1 = b1.lastIndexOf("0");
answers[i] = Long.parseLong(b1.substring(0,i1) + "10" + b1.substring(i1 + 2),2);
}
return answers;
}
}
😭위 풀이방법보다 비트연산자를 이용하면 훨씬 깔끔하게 해결할 수 있습니다. 이 코드는 참고용으로 확인하시면 될 것 같습니다.
- 먼저 해당 값을 2진수로 바꿔줍니다.
- 짝수의 경우 맨 뒷 비트가 0이므로 1로 바꿔주기만 하면 하나의 비트만 차이나면서 가장 작은 값이 나오게 됩니다.
- 홀수의 경우 가장 끝에 있는 0을 찾습니다. 해당 0을 1로 바꿔주고 다음 값을 0으로 바꿔주면 정답값이 나오게 됩니다. 이 때 0이 없는 경우가 있을 수 있기에 맨 앞에 0을 붙여주었습니다.
- 배열에 값을 저장한 후 위 방법을 반복하면 정답입니다.🥳