TODAY TIL

오늘은 문자열을 특정 규칙에 따라 여러 덩어리로 나누는 문제를 해결해 보았습니다. 이 문제에서는 주어진 문자열을 기준에 따라 잘라내어, 분리된 덩어리 개수를 구해야 했습니다.

 

문제 설명

문자열 s가 주어졌을 때, 다음 규칙을 따라 문자열을 여러 문자열로 분해합니다.

  1. 첫 글자를 읽고, 이 글자를 x로 설정합니다.
  2. 문자열을 왼쪽에서 오른쪽으로 읽어나가면서, x와 x가 아닌 다른 글자들이 나온 횟수를 각각 셉니다.
  3. 두 횟수가 처음으로 같아지는 순간, 지금까지 읽은 문자열을 하나의 덩어리로 분리합니다.
  4. 분리한 문자열을 제외하고 남은 문자열에 대해서 같은 과정을 반복합니다.
  5. 문자열이 모두 처리될 때까지 반복하며, 분리된 문자열의 개수를 반환합니다.

예시:

  • 입력: "banana"
  • 출력: 3 (분리된 문자열: ["ba", "na", "na"])

 

해결 과정

문제를 해결하기 위해 다음 단계로 접근했습니다.

  1. 첫 글자 선택하기: 문자열에서 첫 글자를 x로 설정합니다.
  2. 글자 수 세기: 첫 글자 x의 개수와 x가 아닌 글자의 개수를 세면서 진행합니다.
  3. 덩어리 분리: 두 개의 개수가 같아지는 순간을 기준으로 덩어리를 분리합니다.
  4. 남은 문자열 반복: 문자열의 끝까지 위 과정을 반복하여 남은 모든 문자열을 분리합니다.

 

코드 구현

아래는 이 문제를 해결하는 Python 코드입니다.

def solution(s):
    answer = 0  # 분리된 덩어리 개수
    i = 0  # 현재 위치를 나타내는 인덱스

    while i < len(s):  # 문자열의 끝까지 읽을 때까지 반복
        x = s[i]  # 첫 글자를 x로 설정
        count_x = 0  # x의 개수를 세는 변수
        count_other = 0  # x가 아닌 글자의 개수를 세는 변수

        # x와 다른 글자들을 세어가며 두 개가 같아질 때까지 진행
        while i < len(s):
            if s[i] == x:
                count_x += 1  # x 글자가 나오면 count_x 증가
            else:
                count_other += 1  # 다른 글자가 나오면 count_other 증가

            i += 1  # 다음 글자로 이동

            # x와 다른 글자의 개수가 같아지면 덩어리 분리
            if count_x == count_other:
                answer += 1  # 덩어리 하나 추가
                break  # 분리 후 다시 반복
    
        # 남은 문자열이 있으면 마지막 덩어리로 추가
        if i == len(s) and count_x != count_other:
            answer += 1
    
    return answer

 

코드 설명

  • 첫 글자 설정: 처음 x를 설정해주고, count_x와 count_other를 초기화합니다.
  • 문자 개수 세기: count_x는 x 글자, count_other는 x가 아닌 글자의 개수를 나타내며, 둘이 같아질 때마다 덩어리를 하나 추가합니다.
  • 남은 문자열 처리: 문자열 끝까지 다 읽었는데도 두 개수가 다르다면 남은 문자열을 마지막 덩어리로 간주합니다.

예제 테스트

# 예제 입력
print(solution("banana"))  # 출력: 3
print(solution("abracadabra"))  # 출력: 6
print(solution("aaabbaccccabba"))  # 출력: 3

 

배운 점

  • 문자열의 특정 규칙을 기준으로 구분해야 할 때, 문자를 카운팅하는 방법이 유용하다는 것을 알게 되었습니다.
  • 분리 조건에 따라 반복문을 중간에 빠져나오거나 특정 조건을 설정하는 것이 중요함을 깨달았습니다.
  • 알고리즘의 기초를 배우는게 중요하다는걸 느꼈습니다.

이 포스팅을 통해 문자열 분리 문제를 규칙적으로 해결하는 방법을 익힐 걸 공유할수 있어서 좋았습니다.

+ Recent posts