알고리즘 문제풀이/프로그래머스
[프로그래머스/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;
}