-
https://school.programmers.co.kr/learn/courses/30/lessons/77885
아이디어
정수를 bit로 표현했을때 2개 이하의 비트가 차이나는 가장 작은 수는 가장 마지막 비트로 결정되는 짝수, 홀수에따라 처리될 수 있습니다. 만약 짝수의 경우 마지막 비트수가 0이기 때문에 1만 더해주면 조건을 만족하게 되고 홀 수 일경우 1을 더해줄경우 앞에 있는 비트의 올림이 연속적으로 발생할 수 있기 때문에 이 경우를 고려하여 1연속된 하위비트의 개수(N)를 찾아서 N-1만큼 연속되는 비트수를 더해주면 됩니다. 비트의 경우 머리속으로 그리기 힘들기 때문에 손으로 직접 써보는게 이해에 도움이 많이됩니다.
#include <string> #include <vector> using namespace std; vector<long long> solution(vector<long long> numbers) { vector<long long> answer; for (auto iter : numbers) { long long bit = 1; if (iter & bit) { //홀수일때는 연속된 1의 개수가 n일때 n-1자리만큼 비트 수를 더하면 됨 while (true) { if ((iter & bit) == 0) break; bit <<= 1; } bit >>= 1; answer.push_back(iter + bit); } else { //짝수일때는 가장 오른쪽 비트가 0이기 때문에 1만 더해주면 비트가 1개만 차이남 answer.push_back(iter + bit); } } return answer; }
댓글