프로그래머스 - 2개 이하로 다른 비트

greenTea·2023년 8월 10일
0
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;
    }
}

😭위 풀이방법보다 비트연산자를 이용하면 훨씬 깔끔하게 해결할 수 있습니다. 이 코드는 참고용으로 확인하시면 될 것 같습니다.

  1. 먼저 해당 값을 2진수로 바꿔줍니다.
  2. 짝수의 경우 맨 뒷 비트가 0이므로 1로 바꿔주기만 하면 하나의 비트만 차이나면서 가장 작은 값이 나오게 됩니다.
  3. 홀수의 경우 가장 끝에 있는 0을 찾습니다. 해당 0을 1로 바꿔주고 다음 값을 0으로 바꿔주면 정답값이 나오게 됩니다. 이 때 0이 없는 경우가 있을 수 있기에 맨 앞에 0을 붙여주었습니다.
  4. 배열에 값을 저장한 후 위 방법을 반복하면 정답입니다.🥳

출처 : 프로그래머스 - 2개 이하로 다른 비트

profile
greenTea입니다.

0개의 댓글