[LeetCode] Positions of Large Groups

준규·2022년 10월 3일
0

소문자로만 이루어져있는 문자열 s가 주어질 때 연속된 부분 문자열의 길이가 3이상인 부분 문자열이 존재할 때 시작 인덱스와 끝 인덱스를 가지고 group을 만들 수 있다고 한다

예를 들어 문자열이 "abbxxxxzyy" 라면 group 은 [3,6]이 되는것이다

이러한 조건에서 모든 group 을 시작 인덱스 기준 오름차순으로 이차원 배열로 리턴하는 문제이다

Example을 보자

2번 예시와 같이 a,b,c로만 이루어져 있으므로 group이 존재 하지 않는것이다

const largeGroupPositions = function (s) {
  let result = [];

  let i = 0;
  let count = 1;

  while (i < s.length - 1) {
    if (s[i + 1] === s[i]) {
      count++;
      if (count >= 3 && i + 1 === s.length - 1) {
        result.push([i + 1 - count + 1, i + 1]);
        return result
      }
      i++;
      continue;
    } else {
      if (count >= 3) {
        result.push([i - count + 1, i]);
        count = 1;
        i++;
        continue;
      } else {
        count = 1;
        i++;
        continue;
      }
    }
  }

  return result;
};

먼저 배열 result를 선언해주고 while문을 이용하기로 했다

가장 크게 보면 현재 인덱스의 문자와 다음 인덱스의 문자가 같은경우와 다른경우가 존재한다

s[i] === s[i+1]일 경우 count 값을 1 증가 시켜주고 i값을 증가시켜주기전에 count 값이 3 이상이고 i+1 값이 s.length - 1(마지막 인덱스) 조건으로 체크를 해주었다 만약 이 두 조건이 맞다면 문자열이 group 하나로 이루어져 있는 문자열 (ex : "aaa")이므로 result에 부분 배열을 넣어주고 그대로 result를 리턴해준다

만약 위 두 조건이 아니라면 i를 증가시키고 다시 반복문으로 돌아간다

만약 s[i] !== s[i+1] 일 경우에는 count 값이 3이상인지 체크하면 된다

3이상이라면 result에 푸쉬해주고 count 값을 1로 초기화 해준다

그 다음 i를 증가시킨 후 반복문으로 돌아간다

3 미만이라면 i값을 증가시키고 count 를 1 로 초기화 시키고 반복문으로 돌아가면 된다

submit을 해보니

정답이었다!

profile
안녕하세요 :)

0개의 댓글