[LeetCode] Longer Contiguous Segments of Ones than Zeros

준규·2022년 10월 10일
0

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을 해보니

정답이었다!

profile
안녕하세요 :)

0개의 댓글