https://app.codility.com/programmers/lessons/1-iterations/binary_gap/
BinaryGap coding task - Learn to Code - Codility
Find longest sequence of zeros in binary representation of an integer.
app.codility.com
내가 실제로 제출한 코드는 아래와 같다.
function solution(N) {
// write your code in JavaScript (Node.js 8.9.4)
N = N.toString(2);
var Narr = N.match(/(0+)(?:1+)/g)
var result = (Narr == null) ? 0 : Narr.sort(function(a, b) {return a.length < b.length;})[0].length-1
return result;
}
조건문을 사용하지 않고 정규식을 사용했다.
정규식을 /(?:1+)(0+)(?:1+)/g로 하지 않은 이유는 1001000100001을 매칭 할 때 /(?:1+)(0+)(?:1+)/g로 매칭하게 되면,
1001을 매칭하고 나서 10001을 매칭해야 하는데 0001을 다음 문자열로 받아들여 매칭 되지 않고,
100001을 매칭했기 때문이다.
그래서 1001을 매칭하고 난 뒤, 10001을 매칭 할 수 있는 방법을 꽤 오래 찾다가
생각해보니 toString(2)를 통해 만들어지는 이진수의 첫째 자리가 무조건 1이라면,
굳이 1001, 10001, 100001을 매칭할 필요 없이 001, 0001, 00001을 매칭 하면 될 거 같았다.
따라서, 위의 코드와 같이 정규식을 짰다.
하지만 스코어가 80이 나와서 어떤 점이 문제인지는 좀 더 찾아봐야 한다.
참고로,
function solution(N) {
// write your code in JavaScript (Node.js 8.9.4)
N = N.toString(2);
var Narr = N.match(/(0+)(?:1+)/g)
if (Narr == null) return 0;
var result = Narr.reduce((acc, cur) => {
return acc.length > cur.length ? acc : cur
}, 0);
return result.length-1;
}
reduce를 써서 이렇게도 풀어보았지만 이 역시도 80점이었다.
채점한 걸 보니 3개의 테스트 결과에 오류가 있어 80점이 나왔으니
테스트 결과들을 바탕으로 다시 한 번 풀어봐야 겠다.
'코딩 테스트 > Codility' 카테고리의 다른 글
Codility TapeEquilibrium JavaScript 풀이 (0) | 2020.03.29 |
---|---|
Codility PermMissingElem JavaScript 풀이 (0) | 2020.03.29 |
Codility FrogJmp JavaScript 풀이 (0) | 2020.03.29 |
Codility OddOccurrencesInArray JavaScript 풀이 (0) | 2020.03.29 |
Codility CyclicRotation JavaScript 풀이 (0) | 2020.03.28 |