프로그래머스 lv1 문자열 나누기
문자열 s가 입력되었을 때 다음 규칙을 따라서 이 문자열을 여러 문자열로 분해하려고 합니다. 먼저 첫 글자를 읽습니다. 이 글자를 x라고 합시다. 이제 이 문자열을 왼쪽에서 오른쪽으로 읽어나가면서, x와 x가 아닌 다른 글자들이 나온 횟수를 각각 셉니다. 처음으로 두 횟수가 같아지는 순간 멈추고, 지금까지 읽은 문자열을 분리합니다 s에서 분리한 문자열을 빼고 남은 부분에 대해서 이 과정을 반복합니다. 남은 부분이 없다면 종료합니다. 만약 두 횟수가 다른 상태에서 더 이상 읽을 글자가 없다면, 역시 지금까지 읽은 문자열을 분리하고, 종료합니다. 문자열 s가 매개변수로 주어질 때, 위 과정과 같이 문자열들로 분해하고, 분해한 문자열의 개수를 return 하는 함수 solution을 완성하세요.
점점 캡쳐하는 성의가 구려지는건 착각이다.
우선 이번 문제는 썩 만족하지 않는 해결....
def solution(s):
ans = ""
count = 0
i = 1
while len(s) != 0:
if len(s) <= s.count(s[0]):
count += 1
break
ans = ans + s[i-1]
if len(ans) - ans.count(s[0]) == ans.count(s[0]):
count+= 1
i = 0
s = s[len(ans):]
ans = ""
i += 1
return count
우선 만족하지는 않으니 해설은 뒤에서...
해결 방법이 틀린건 아니었지만... 개수를 센 후 다시 0부터 센다
라고
생각한 것이 문제였다. 왜...그렇게 생각안했지
저 ''
도, count
와 i
도 다른 방식으로 만들 수 있었다.
이런건 좀 배워야지...
def solution(s):
lists = ["",0,0]
answer = 0
for i in s:
if lists[0] == "":
lists[0] = i
lists[1] += 1
else:
if i == lists[0]:
lists[1] += 1
else:
lists[2] += 1
if lists[1] == lists[2]:
answer += 1
lists = ["",0,0]
if lists != ["",0,0]:
answer += 1
return answer
풀이나 접근하는 방식은 똑같지만
list
안에 셀 문자와, 개수를 넣어놨으니, 셀 문자 를 다시 불러온다거나 할 필요도 없고,
for
문에 s
를 넣어놔서, s
를 실행 후 자른다던지 할 필요도 없어서
변수도 적고, 간단해서 속도
면이나 효율성
면에서 훨씬 낫다..
사실 for
문으로 len()
을 돌리면 break
하기가 힘들고 그 조건을 세우기도 까다로웠는데
이렇게 할수도 있었구나 싶었다.... 알아둬야지...
이걸 풀었다고 해야할지..삐질.... 썩 기분이 좋진 않음 ㅜ