- 경우의 수를 나눈 후, 각 경우에 맞는 문제풀이
- 진수에 대한 명확한 이해
양의 정수 x에 대하여 x보다 크고 비트가 1~2개 다른 수들 중 제일 작은 수를 구하여라. 정수들이 담긴 배열 numbers가 매개변수로 주어지고 numbers의 모든 수들에 대하여 값을 차례로 담아 return 하도록 함수를 만들어라.
예시)
2 👉 10 따라서 3 👉 11 이 정답이다.
7 👉 111 따라서 11 👉 1011 이 정답이다.
제한사항)
#include <string>
#include <vector>
#include <iostream>
using namespace std;
vector<long long> solution(vector<long long> numbers) {
vector<long long> answer;
for(int i=0; i<numbers.size(); i++){
long long int bit=1;
//짝수의 경우
if(numbers[i]%2==0){
answer.push_back(numbers[i]+1);
}
//홀수의 경우
else{
//연속된 1의 마지막 자리를 찾음
while((numbers[i]&bit)!=0){
bit*=2;
}
bit/=2;
answer.push_back(numbers[i]+bit);
}
}
return answer;
}
이 문제는 주어진 수가 짝수일 때와 홀수일 때의 문제풀이가 다르다.
1. 짝수
짝수의 경우는 어떠한 경우에도 가장 끝의 자리가 0이다. 따라서 가장 마지막 0에 1을 더해주면 위의 조건을 만족하는 수를 구할 수 있다.
예시) 2 👉 3