본문 바로가기
개발이야기/알고리즘

[알고리즘] 문자열 나누기

by KimHarry 2023. 3. 23.

1. 조건

문자열 s가 주어진다.

첫 글자를 x로 하고 x의 글자수를 순서대로 세기 시작한다

이 과정에서 x가 아닌 글자의 글자수도 동시에 센다.

 

x의 글자수와 x가 아닌 글자수가 일치하는 순간 글자를 슬라이싱하고 result를 1 증가시킨다.

문자열 s가 끝날때까지 반복하고 끝에는 글자수가 서로 달라도 슬라이싱을 진행하고 result를 1 증가시킨다.

 

1 <= s의 길이 <= 10,000

 

 

2. 풀이과정

최악의 경우를 생각하면 문자 슬라이싱을 5000번까지 진행해야할 수도 있다.

따라서 반복문안에서 slice()를 사용하는 방법보다

슬라이싱 조건이 충족하는 경우 각 count를 0으로 초기화해 가면서 진행하는게 속도측면에서 좋아보인다.

 

3. 풀이

function solution(s) {
  let x = s[0];
  let answer = 0;
  let isX = 0;
  let notX = 0;

  for (let idx = 0; idx < s.length; idx += 1) {
    if (isX === 0 && notX === 0) x = s[idx];

    if (idx + 1 === s.length) {
      answer += 1;
      break;
    }

    if (s[idx] === x) {
      isX += 1;
    } else {
      notX += 1;
    }

    if (isX === notX) {
      isX = 0;
      notX = 0;
      answer += 1;
      continue;
    }
  }

  return answer;
}