[ 프로그래머스 ] 2개 이하로 다른 비트
문제
https://school.programmers.co.kr/learn/courses/30/lessons/77885
풀이
양의 정수 x보다 크고 x와 비트가 1~2개 다른 수들 중에서 제일 작은 수를 구하는 문제로, 짝수는 항상 오른쪽 비트가 0이므로 1을 더해주면 된다. 그러나 홀수의 경우 올림을 해야 하므로 1을 더하면 전혀 다른 수가 나올 확률이 높다. 따라서 짝수와 같이 1을 더해주고도 적은 영향을 주기 위해 0을 가진 최하위 비트를 찾고 다음 비트를 0으로 바꿔 구한다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#include <string>
#include <vector>
#include <bitset>
using namespace std;
vector<long long> solution(vector<long long> numbers)
{
vector<long long> answer;
for (int i = 0; i < numbers.size(); i++)
{
long long ans = 0;
if (numbers[i] % 2 == 0)
{
ans = numbers[i] + 1;
answer.push_back(ans);
}
else
{
long long bit = 1;
while (true)
{
if ((numbers[i] & bit) == 0) break;
bit *= 2;
}
bit = bit / 2;
answer.push_back(numbers[i] + bit);
}
}
return answer;
}
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.