프로그래머스

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

programmers.co.kr

조건

  • 구해야 하는 수 f는 x보다 크고 x와 비트가 1~2개 다른 수 중 가장 작은 수이다.

풀이 방법

양의 정수 x가 짝수라면 비트가 무조건 0으로 끝나게 되므로 1만 더하면 간단하게 f를 구할 수 있다.

x가 홀수라면 최하위 비트에서 최상위 비트로 이동하며 0인 곳을 찾고 해당 부분이 1이 되게 값을 더한 결과가 f가 된다.

#include <string>
#include <vector>

using namespace std;

vector<long long> solution(vector<long long> numbers) {
    vector<long long> answer;
    
    for(int i = 0 ; i < numbers.size(); i++) {
        if(numbers[i] % 2 == 0)
            answer.push_back(numbers[i] + 1);
        else {
            long long bit = 1;
            
            while(true) {
                if(!(numbers[i] & bit)) break;
                bit *= 2;
            }
            bit /= 2;
            answer.push_back(numbers[i] + bit);
        }
    }
    
    return answer;
}

'프로그래머스 > 2레벨' 카테고리의 다른 글

롤케이크 자르기/C++  (0) 2023.02.15
게임 맵 최단거리/C++  (0) 2023.02.13
[3차] n진수 게임/C++  (0) 2023.02.10
숫자 블럭/C++  (0) 2023.02.08
점 찍기/C++  (0) 2023.02.08

+ Recent posts