Python/코딩테스트

[프로그래머스/python] 코딩테스트 연습 Lv.1 (6월 다섯 번째 주 1)

김과분 2023. 6. 25. 20:07
728x90

문자열 나누기

문제 설명

1. 문자열 s가 주어지면, 문자열 s의 첫 글자를 x라고 한다.

2. 문자열을 오른쪽으로 읽어나가면서 x와 같은 글자와 x와 다른 글자가 나온 횟수를 각각 센다

3. 두 횟수가 같아지면 지금까지 읽은 문자열을 분리한다.

4. 분리한 문자열을 빼고 남은 부분에 대해 이를 반복한다. 즉, 비교 대상인 첫 글자 x가 남은 부분의 첫 글자로 달라진다.

-> 남은 부분이 없으면, 분해한 문자열의 개수를 return한다.

입출력 예

s = aaabbaccccabba, x = a

a -> 같은 글자 = 1

a -> 같은 글자 = 2

a -> 같은 글자 = 3

b -> 다른 글자 = 1

b -> 다른 글자 = 2

a -> 같은 글자 = 4

c -> 다른 글자 = 3

c -> 다른 글자 = 4

횟수 같아짐 -> aaabbacc / ccabba, x = c

c -> 같은 글자 = 1

c -> 같은 글자 = 2

a -> 다른 글자 = 1

b -> 다른 글자 = 2

횟수 같아짐 -> aaabbacc / ccab / ba, x = b

b -> 같은 글자 = 1

a -> 다른 글자 = 1

횟수 같아졌으나, 남은 부분 없음 -> 총 분해한 문자열 개수 = 3

Solution

def solution(s):
    answer = 1 # 분해된 문자열 개수, 1로 시작
    count = [0, 0] # count[0] = 같은 문자 개수, count[1] = 다른 문자 개수
    start = s[0] # 첫 글자
    i=0 # 첫 글자와 비교하는 대상의 index
    while(i<len(s)): # 비교하는 대상의 index가 문자열 s의 마지막 문자까지 왔을 때 종료
        if start==s[i]: # 같을 때
            count[0]+=1
        elif start!=s[i]: # 다를 때
            count[1]+=1
        if count[0]==count[1] and i<len(s)-1: # 같은 문자 개수 == 다른 문자 개수
            answer+=1 # 문자열 분리됨 -> 분해된 문자열 개수 추가
            start=s[i+1] # 비교하는 대상까지 문자열 분리했으므로, 첫 글자는 그 다음 글자가 됨
            # 같은/다른 문자 개수 초기화
            count[0]=0
            count[1]=0
        i+=1
    return answer

s = aaabbaccccabba, start = a, answer(문자열 개수) = 1

a == a -> [1, 0]

a == a  -> [2, 0]

a == a -> [3, 0]

b != a -> [3, 1]

b != a -> [3, 2]

a == a -> [4, 2]

c != a -> [4, 3]

c != a -> [4, 4]

횟수 같아짐 -> start = c, answer = 2

c == c -> [1, 0]

c == c -> [2, 0]

a != c -> [2, 1]

b != c -> [2, 2]

횟수 같아짐 -> start = b, answer = 3

b == b -> [1, 0]

a != b -> [1, 1]

횟수 같아졌으나, 남은 부분 없음 -> answer = 3

 

Result

728x90