본문 바로가기
프로그래머스

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

by 콩순이냉장고 2021. 7. 28.

문제 URL : https://programmers.co.kr/learn/courses/30/lessons/77885

 

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

 

programmers.co.kr

 

문제 접근법 : 

 

홀수와 짝수인경우로 나눴습니다.

 

우선 쉽게 짝수인경우 비트가 마지막 비트가 0이됩니다.

1개만 큰수중에서 비트가 한개만달라도 되기때문에 마지막 비트에 1을 추가하면 되기때문에 짝수+1이 되빈다.

그렇다면 홀수인경우엔 규칙을 찾아보면

첫 0이나오는 비트에서 1을 추가한후 그뒤에있는 비트를 제거하면 답이됩니다.

1개또는 2개가 다른결과가 됩니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <bits/stdc++.h>
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);
            continue;
        }
        long long num2 = ~num;
        long long idx = log2(num2 & -num2);
        answer.push_back(num + (1L << idx) - (1L << (idx - 1)));
    }
    return answer;
}
cs

 

 

궁금한점 혹은 모르는점 언제든지 댓글은 환영입니다.