// you can use includes, for example:
// #include <algorithm>
// you can write to stdout for debugging purposes, e.g.
// cout << "this is a debug message" << endl;
int solution(int N) {
// write your code in C++14 (g++ 6.2.0)
int start = 0, end = 0, count = 0, answer = 0;
while(N >= 1) {
if(N % 2 == 1) {
count++;
if(count > 1) answer = answer > end - start - 1 ? answer : end-start - 1;
start = end;
// 10000010001
}
end++;
N /= 2;
}
return answer;
}
function solution(N) {
const binaryNum = N.toString(2);
const binaryGaps = binaryNum.slice(binaryNum.indexOf('1') + 1, binaryNum.lastIndexOf('1'));
const zeroCounted = binaryGaps.split('1').map(zeros => zeros.length);
return zeroCounted.length ? Math.max(...zeroCounted) : 0;
}
// 출처: https://im-developer.tistory.com/178 [Code Playground]
코딜리티를 사용해야할 일이 있어서 연습할 겸 문제를 풀었다. Lesson1이어서 문제는 빠르게 풀었다. 2진수로 바꾸면서 1의 개수를 세리다가 2번 나왔을 때 부터 길이를 체크해줬다. -1을 한 이유는 사이의 0
만 세리기 위해서이다.
추가로 다른 사람들의 풀이가 궁금해서 검색해봤는데 JS로 잘 푼 거 같은 코드가 있어서 같이 첨부한다. 맨 앞과 맨 뒤의 1
로 slice
를 하고 다시 1
을 기준으로 split
한 뒤에 0의 길이를 세렸다. 예를 들어 1001000100100
이 있으면 001000100
이 나오고 1
을 기준으로 split
해서 00, 000, 00이 나오고 그 길이들을 저장한 뒤에 Math.max
와 전개 연산자를 활용해 정답을 찾았다.