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);
        }
    }
}