[C#] 문자열 나누기

Connected Brain·2025년 6월 18일

코딩 테스트

목록 보기
3/67

문자열 나누기

문제 설명

문자열 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) 함수를 통해 분석 대상이 문자열과 동일한지 판단 기준이 될 문자를 넘겨주도록 하였다.
  • 해당 함수를 기준 문자와 같은 문자, 다른 문자를 확인하는 반복문을 돌다가, countSamecountDifferent의 값이 같아질 때 outPoint에 값을 입력하고 반복문을 종료하도록 했다.
  • outPoint는 기존 문자열에서 분리된 문자열이 시작될 지점을 의미하며, 해당 지점에서부터의 부분 문자열과 해당 지점에서의 문자를 매개변수로 CheckSplit() 함수에 넘겨주었다.

0개의 댓글