문자열 s
가 입력되었을 때 다음 규칙을 따라서 이 문자열을 여러 문자열로 분해하려고 합니다.
s
에서 분리한 문자열을 빼고 남은 부분에 대해서 이 과정을 반복합니다. 남은 부분이 없다면 종료합니다.문자열 s
가 매개변수로 주어질 때, 위 과정과 같이 문자열들로 분해하고, 분해한 문자열의 개수를 return 하는 함수 solution을 완성하세요.
s
의 길이 ≤ 10,000s
는 영어 소문자로만 이루어져 있습니다.입출력 예 #1
s
="banana"인 경우 ba - na - na와 같이 분해됩니다.
입출력 예 #2
s
="abracadabra"인 경우 ab - ra - ca - da - br - a와 같이 분해됩니다.
입출력 예 #3
s
="aaabbaccccabba"인 경우 aaabbacc - ccab - ba와 같이 분해됩니다.
주어진 문자열 s
를 순회하며 다음과 같이 반복문에서 처리한다.
가장 중요한 것은 마지막 if
문인데, 여기 조건이 정답을 맞추기에 좀 까다로웠다.
특수 case들 때문에 마지막 if
문을 사용했는데, 예를 들면 다음과 같은 s
들에 대해서 고려해주어야 한다.
x_cnt
는 엄청 카운트됐지만 문자열이 나눠진 적이 없는 경우x_cnt
와 other_cnt
가 각각 카운트되긴 했지만 문자열이 나눠질 수 없는 경우또한, 나는 실제로 문자열을 나누지 않고 그냥 나눠진 횟수만 카운트 해주었다. (실제로 그래도 상관 없다. 나눠진 문자열 조각들을 리턴하는 게 아닌 이상)
function solution(s) {
var answer = 0;
var x_cnt = 0, other_cnt = 0;
var x = s[0];
for(let i=0; i<s.length; i++) {
s[i] == x ? x_cnt++ : other_cnt++;
if(x_cnt == other_cnt) {
answer++;
//문자열이 나눠진 효과를 내기 위해서 카운트를 다시 0으로 초기화
x_cnt = 0, other_cnt = 0;
//새로운 x를 미리 지정하여 반복문 윗단에서 카운트 할 수 있게 세팅
x = s[i+1];
}
if(i == s.length-1 && other_cnt >= 0 && x_cnt >= 1) {
answer++;
}
}
return answer;
}