1,0 으로 이루어진 이진문자열 s가 주어질 때 한 숫자가 연속될 때 그 부분의 길이중 가장 긴 부분을 longest contiguous segment라고 하기로 한다
1의 longest contiguous segment 와 0의 longest contiguous segment 중 1의 것이 더 크다면 true를 아니라면 false를 리턴하면 된다
Example 을 보자
const checkZeroOnes = function (s) {
let longestOne = 0;
let segmentOne = 0;
let longestZero = 0;
let segmentZero = 0;
for (let i = 0; i < s.length; i++) {
if (s[i] === "1") {
segmentOne++;
if (s[i + 1] !== s[i] || !s[i + 1]) {
longestOne = Math.max(longestOne, segmentOne);
segmentOne = 0;
}
} else if (s[i] === "0") {
segmentZero++;
if (s[i + 1] !== s[i] || !s[i + 1]) {
longestZero = Math.max(longestZero, segmentZero);
segmentZero = 0;
}
}
}
return longestOne > longestZero ? true : false;
};
for문을 돌면서 현재 숫자와 다음 숫자를 비교를 한다
우선 현재 숫자가 1 인지 0 인지를 체크를 먼저 하고 segment 값을 1 증가시켜준다
그리고 이때 다음 숫자가 현재 숫자와 같은 값이 아니거나 다음 숫자 값이 없는 상태(현재 숫자가 마지막 숫자) 인 경우 max 함수를 이용하여 segment 값의 최댓값을 갱신 시켜준다
마지막으로 두가지 segment 최댓값을 비교하여 1의 것이 더 크다면 true를 리턴해주었다
submit을 해보니
정답이었다!