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