소문자로만 이루어져있는 문자열 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을 해보니
정답이었다!