• Programers 2개 이하로 다른비트 / C++

    2022. 12. 3.

    by. 내이름은 킹햄찌

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

     

    프로그래머스

    코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

    programmers.co.kr

    아이디어

    정수를 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;
    }

    댓글