Java
프로그래머스: 2개 이하로 다른 비트
Daeryuk Kim
2024. 3. 30. 22:25
public class Solution {
public long[] solution(long[] numbers) {
long[] answer = new long[numbers.length];
for (int i = 0; i < numbers.length; i++) {
answer[i] = findNext(numbers[i]);
}
return answer;
}
private long findNext(long number) {
if (number % 2 == 0) {
// 짝수인 경우, 가장 오른쪽 비트가 0이므로 1로 바꾸면 됩니다.
return number + 1;
} else {
// 홀수인 경우, 0인 비트를 찾아 그 위치를 1로 바꾸고, 바로 오른쪽 비트를 0으로 만듭니다.
// '0'이 나타나는 위치를 찾아 그 위치의 비트를 1로, 바로 오른쪽 비트를 0으로 설정합니다.
long rightMostZero = ~number & (number + 1);
long nextNumber = number | rightMostZero;
nextNumber &= ~(rightMostZero >> 1);
return nextNumber;
}
}
public static void main(String[] args) {
Solution solution = new Solution();
long[] numbers = {2, 7};
long[] result = solution.solution(numbers);
for (long res : result) {
System.out.println(res);
}
}
}