Coding Test/codility
[codility] BinaryGap c++
owls
2022. 4. 8. 11:39
728x90
- 문제 설명
10진수 N을 2진수로 바꾼 후, 1과 1 사이에 존재하는 0의 개수를 구하는 문제이다.
ex, 1001 -> length : 2
1000010001 -> length : 4 , 3 -> 이 때는 더 큰 수를 return 한다 -> 4
10100 -> length : 1
100000 -> length : 0 -> 1이 하나만 있기 때문에 1과 1사이의 0이 없다.
- 문제 풀이
1. string 에 2진수 변환 저장
2. 1검사해서 index vector에 저장
3. index vector size가 1이라면 1이 한개라는 뜻이므로 return 0
4. index vector 에 1의 index가 저장되어 있기에 각 index에 빼기 연산을 하여 Binary Gap을 구한다.
5. max 함수를 이용하여 최댓값만 저장하도록 했다.
#include <string>
#include <vector>
#include <iostream>
#include <algorithm>
#include <queue>
#include <limits>
int solution(int N) {
// write your code in C++14 (g++ 6.2.0)
//std::vector<int> vecBinary;
std::string strBinary("");
int n = N;
while (n > 0) {
int nRes = n % 2;
n = n / 2;
strBinary += std::to_string(nRes);
}
std::reverse(strBinary.begin(), strBinary.end());
std::vector<int> vecIndex;
int nResult = INT8_MIN;
int count = 0;
for (int i = 0; i < strBinary.size(); i++) {
if (strBinary[i] == '1')
vecIndex.push_back(i);
}
if (vecIndex.size() == 1)
return 0;
for (int i = vecIndex.size()-1; i > 0; i--) {
count = vecIndex[i] - vecIndex[i-1] - 1;
nResult = std::max(count, nResult);
}
return nResult;
}
#define BinaryGap
#ifdef BinaryGap
int main() {
int N1 = 32; // result = 0
int N2 = 9; //result = 2;
std::cout << solution(N1);
return 0;
}
#endif
- 결과
728x90