문자열 s가 입력되었을 때 다음 규칙을 따라서 이 문자열을 여러 문자열로 분해하려고 합니다.
1. 먼저 첫 글자를 읽습니다. 이 글자를 x라고 합시다.
2. 이제 이 문자열을 왼쪽에서 오른쪽으로 읽어나가면서, x와 x가 아닌 다른 글자들이 나온 횟수를 각각 셉니다.
3. 처음으로 두 횟수가 같아지는 순간 멈추고, 지금까지 읽은 문자열을 분리합니다.
4. s에서 분리한 문자열을 빼고 남은 부분에 대해서 이 과정을 반복합니다. 남은 부분이 없다면 종료합니다.만약 두 횟수가 다른 상태에서 더 이상 읽을 글자가 없다면, 역시 지금까지 읽은 문자열을 분리하고, 종료합니다.
문자열 s가 매개변수로 주어질 때, 위 과정과 같이 문자열들로 분해하고, 분해한 문자열의 개수를 return 하는 함수 solution을 완성하세요.
public class SplitString
{
public static int Solution(string s) {
int answer = 1;
CheckSplit(s, s[0], ref answer);
return answer;
}
private static void CheckSplit(string s, char c, ref int answer)
{
int countSame = 0;
int countDifferent = 0;
int outPoint = 0;
if(s.Length <= 1) return;
for (int i = 0; i < s.Length; i++)
{
if(c == s[i]) countSame++;
else countDifferent++;
if (countSame == countDifferent)
{
if(s.Length == i+1) return;
answer++;
outPoint = i + 1;
break;
}
}
if(outPoint != 0)
CheckSplit(s.Substring(outPoint), s[outPoint], ref answer);
}
}
CheckSplit(string s, char c, ref int answer) 함수를 통해 분석 대상이 문자열과 동일한지 판단 기준이 될 문자를 넘겨주도록 하였다.countSame과 countDifferent의 값이 같아질 때 outPoint에 값을 입력하고 반복문을 종료하도록 했다.outPoint는 기존 문자열에서 분리된 문자열이 시작될 지점을 의미하며, 해당 지점에서부터의 부분 문자열과 해당 지점에서의 문자를 매개변수로 CheckSplit() 함수에 넘겨주었다.