본문 바로가기
프로그래밍/알고리즘 풀이

프로그래머스 2개 이하로 다른 비트 (월간 코드 챌린지 시즌2 문제) 자바

by 방구석개발자 2021. 5. 22.
반응형

2개 이하로 다른 비트 문제 보러가기

문제 설명

자바코드

class Solution {
    public long[] solution(long[] numbers) {
        long[] answer = new long[numbers.length];
        for(int i=0;i<numbers.length;i++){
            answer[i]=check(numbers[i]);
        }
        return answer;
    }

    public Long check(long number){
        long result=number;
        if(number%2==0){//짝수 
            result+=1;
        }else{//홀수
            int count=0;
            while(number!=0){
                count++;
                if(number%2==0) break;
                number=number/2;
            }
            if(number!=0)
            result+=(Math.pow(2,count-1)-Math.pow(2,count-2));
            else result+=(Math.pow(2,count)-Math.pow(2,count-1));
        }
        return result;
    }
}

문제 풀이

이 문제는 다행스럽게 해설이 있습니다. -> 해설 보러가기
그러나 해설을 봐도 이해가 잘 안됩니다. ㅎㅎ
간단하게 결과값 출력 로직은 입력값이 짝수인지 홀수인지로 나뉘게 됩니다.

  • 짝수 일때는 입력값에 +1 만 해주면 됩니다. 왜냐면 끝에 0이 되기 때문에 최대한 작은 수로 변경하는건 1만 더하면 되기 때문이죠.
  • 홀수 일때는 또 0이 있을때와 없을때 다릅니다.
  • 0이 있으면 제일 낮은 0이 몇번째있는지 확인하여 01을 10으로 바꿔주면 됩니다.
  • 0이 없으면 총 몇비트인지 확인하여 1을붙여주고제일큰비트를0으로 바꿔주면 됩니다.

이 문제는 개인적으로 정말 풀기 어려웠습니다. 해설을 봐도 잘 이해가 안되고 며칠을 고민한 끝에 풀어내서 나름 뿌듯합니다.

반응형

댓글