알고리즘 문제풀이/프로그래머스

[프로그래머스/Level 2] 2개 이하로 다른 비트 (C++)

노력의천재 2021. 7. 27. 18:12

https://programmers.co.kr/learn/courses/30/lessons/77885

 

코딩테스트 연습 - 2개 이하로 다른 비트

 

programmers.co.kr

짝수를 2진법, 비트로 표현했을 때, 가장 오른쪽 비트는 0이 된다. 따라서 +1을 해주면 오른쪽 비트만 1로 변하게 되기 때문에 비트가 총 1개 다르게 된다.

홀수를 비트로 표현하면 가장 오른쪽 비트는 1이 된다. 연속된 비트(1)의 개수가 n개일 때, n-1자리의 비트 수만큼 더하면 f(x) 값이 나오게 된다.

 

#include <string>
#include <vector>
using namespace std;

vector<long long> solution(vector<long long> numbers) {
    vector<long long> answer;
    
    for(int i = 0; i < numbers.size(); i++) {
        if(numbers[i] % 2 == 0) answer.push_back(numbers[i] + 1);
        else {
            long long bit = 1;
            
            while(1) {
                if((numbers[i] & bit) == 0) break;
                bit <<= 1; // bit *= 2;
            }
            
            bit >>= 1; // bit /= 2;
            answer.push_back(numbers[i] + bit);
        }
    }
    
    return answer;
}