본문 바로가기

알고리즘 · 코딩

[프로그래머스] 2개 이하로 다른 비트

문제 링크

https://programmers.co.kr/learn/courses/30/lessons/77885?language=cpp 

 

코딩테스트 연습 - 2개 이하로 다른 비트

 

programmers.co.kr


C++ 풀이

#include <string>
#include <vector>
#include <cmath>
using namespace std;

vector<long long> solution(vector<long long> numbers) {
    vector<long long> answer;

    for (long long i = 0; i < numbers.size(); i++) {
        long long num = numbers[i];
        long long temp = num;
        int pos = 0;

        //짝수인 경우 +1
        if (num % 2 == 0) {
            answer.push_back(num + 1);
            continue;
        }

        //맨 앞이 0인 자리 찾기
        while ((temp & 1) == 1) {
            temp = temp >> 1;
            pos++;
        }

        //홀수인 경우 맨 앞자리 0을 1로, 그 다음 오른쪽 자리 1을 0으로 바꿔줌
        num += pow(2, pos) - pow(2, pos - 1);

        answer.push_back(num);
    }
    return answer;
}

비트 연산을 응용한다기 보다는 규칙을 찾아서 풀었다.

 

 

반응형