[프로그래머스/python] 코딩테스트 연습 Lv.1 (6월 다섯 번째 주 1)
문자열 나누기
문제 설명
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