코딩테스트 연습 - 문자열의 아름다움

문제 설명

어떤 문자열 x의 "아름다움"을 다음과 같이 정의합니다.

예를 들어, 문자열 "abbca"의 아름다움은 3입니다. 인덱스 1(b)과 4(a)를 고르거나, 또는 0(a)과 3(c)를 고를 때 최대값이기 때문입니다.

영어 소문자로 이루어진 문자열 s가 매개변수로 주어집니다. s의 모든 부분문자열의 아름다움의 합을 return 하도록 solution 함수를 완성해주세요.


제한 사항


https://s3-us-west-2.amazonaws.com/secure.notion-static.com/fca765b4-b813-4892-b4e1-58469ff17ed9/Screen_Shot_2021-04-07_at_12.40.31_PM.png

"""
문자열의 아름다움

<https://programmers.co.kr/learn/courses/30/lessons/68938>
"""

def find(word):
    length = len(word)

    if length == 1:  # one letter
        return 0
    else:
        basic = word[0]  # check if all letters are the same
        i = 0
        while i < length:
            if basic != word[i]:
                break
            if i == length - 1:
                return 0
            
            i += 1
        
        if word[0] == word[-1]:  # find the most further 2 letters
            i = 1
            while True:
                if word[i] != word[-1]:
                    return (length - 1) - i
                i += 1
        else:
            return length - 1

def solution(s):
    answer = 0

    i = 0
    while i < len(s):
        j = i + 1
        while j <= len(s):
            answer += find(s[i:j])
            
            j += 1
        
        i += 1
    
    return answer

print(solution("baby"))

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/32621ecf-9e56-43c8-bc22-f381ea61c3e8/Screen_Shot_2021-04-07_at_12.43.15_PM.png