문자열 s
가 입력되었을 때 다음 규칙을 따라서 이 문자열을 여러 문자열로 분해하려고 합니다.
s
에서 분리한 문자열을 빼고 남은 부분에 대해서 이 과정을 반복합니다. 남은 부분이 없다면 종료합니다.문자열 s
가 매개변수로 주어질 때, 위 과정과 같이 문자열들로 분해하고, 분해한 문자열의 개수를 return 하는 함수 solution을 완성하세요.
s
의 길이 ≤ 10,000s
는 영어 소문자로만 이루어져 있습니다.s | result |
---|---|
"banana" | 3 |
"abracadabra" | 6 |
"aaabbaccccabba" | 3 |
def solution(s):
answer = 0
t = ["", 0, 0] # 지정문자, 지정문자 수, 비교문자 수
for i in s:
if t[0] == "": #처음 지정 문자 잡아주기
t[0] = i
t[1] += 1
else :
if t[0] == i: # 지정문자 == 비교문자
t[1] += 1
else: #지정문자 != 비교문자
t[2] += 1
if t[1] == t[2]: #문자 수가 서로 같을때
answer += 1
t = ["", 0, 0] #문자 수가 같은거 check 후 다시 초기화 작업 필요
if t != ["", 0, 0]: # 더이상 나눌 문자가 없을때 handle
answer += 1
return answer
원래는 지정문자, 지정문자수, 비교문자수 를 변수에 할당하여 while loop로 돌리려고 했으나 지정문자수와 비교문자수가 같은걸 check후, 초기화 하는 부분에서 계속 걸렸었다.
그래서 도저히 아이디어가 떠오르질 않아 참고를 한 결과,
지정문자, 지정문자수, 비교문자수를 따로 배열로 관리해서 값을 assign했다. 약간 계수정렬의 아이디어와 비슷하다고 생각을 한 문제기도 했다.
분기문에 대한 아이디어는 어렵지 않았지만, 지정문자, 지정문자수, 비교문자수들을 관리하는 자료구조를 얼마나 잘 활용하는지가 관건인 문제였다.