문자열 나누기

Polla·2023년 1월 16일
0

programmers

목록 보기
27/58
post-thumbnail

프로그래머스 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부터 센다라고
생각한 것이 문제였다.
왜...그렇게 생각안했지

''도, counti도 다른 방식으로 만들 수 있었다.
이런건 좀 배워야지...

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 하기가 힘들고 그 조건을 세우기도 까다로웠는데
이렇게 할수도 있었구나 싶었다.... 알아둬야지...


	이걸 풀었다고 해야할지..삐질.... 썩 기분이 좋진 않음 ㅜ
profile
트러블 슈팅 Blog => https://polla.palms.blog/home

0개의 댓글