테케 10, 11번 킹받네..
아무튼 최하위에 있는 0과 그 밑의 1의 자릿수를 구한다. 예를 들어 100011이라면 최하위에 등장하는 0의 자리수는 오른쪽부터 시작할 때 3이다. 그 뒤에 있는 1의 자릿수만큼 1을 shift해준 값을 원래 수에 더해주면 정답이다.
예: 0111 + (1 « 2) = 1011
#include <vector>
using namespace std;
vector<long long> solution(vector<long long> numbers) {
vector<long long> answer;
for (long long num : numbers) {
if (num % 2 == 0) answer.push_back(num + 1);
else {
long long tmp = 1;
while (true) {
if (!(num & tmp)) break;
tmp *= 2;
}
tmp /= 2;
answer.push_back(num + (1 << (cnt)));
}
}
return answer;
}